6

重複の可能性:
PHP での URL フレンドリなユーザー名?

スラッグをエスケープして作成するために適切な関数を使用することにどういうわけか混乱しています

私はこれを使用しました:

$slug_title = mysql_real_escape_string()($mtitle);

しかし、誰かがそれを使わずに urlencode() を使うように言った

ナメクジとセキュリティのどちらが優れているか

SO でわかるように、単語の間に - を挿入します。

https://stackoverflow.com/questions/941270/validating-a-slug-in-django
4

2 に答える 2

12

MySQL または URL エスケープを使用することは、適切な方法ではありません。

これを改善する記事は次のとおりです。

function toSlug($string,$space="-") {
    if (function_exists('iconv')) {
        $string = @iconv('UTF-8', 'ASCII//TRANSLIT', $string);
    }
    $string = preg_replace("/[^a-zA-Z0-9 -]/", "", $string);
    $string = strtolower($string);
    $string = str_replace(" ", $space, $string);
    return $string;
}

これは、アクセント付きの文字に対しても正しく機能します。

于 2010-04-05T19:26:55.463 に答える
2

mysql_real_escape_string() には urlencode() とは異なる目的があり、どちらもスラッグの作成には適していません。

スラッグは、ページを簡潔に説明する明確で意味のあるフレーズである必要があります。

mysql_real_escape_string() は、元のクエリ文字列の目的を変更する可能性のある危険な文字をエスケープします。

urlencode() は、無効な URL 文字を "%" の後にコードを表す 2 桁の 16 進数でエスケープします (例: スペースの場合は %20)。この方法では、結果の文字列は不快な文字列のため、明確で意味のあるものではなくなります。たとえばhttp://www.domain.com/bad%20slug%20here%20%3C--

したがって、urlencode() の影響を受ける可能性のある文字は、通常-.

于 2010-04-05T19:40:51.140 に答える