web-dev-qa-db-ja.com

正規表現サニタイズ(PHP)

文字列をURLにサニタイズしたいので、これが基本的に必要なものです。

  1. 英数字とスペースを除くすべてを削除し、破線にする必要があります。
  2. スペースはダッシュに変換する必要があります。

例えば。

This, is the URL!

戻る必要があります

this-is-the-url
function slug($z){
    $z = strtolower($z);
    $z = preg_replace('/[^a-z0-9 -]+/', '', $z);
    $z = str_replace(' ', '-', $z);
    return trim($z, '-');
}
42
SilentGhost

最初に不要な文字を削除します

$new_string = preg_replace("/[^a-zA-Z0-9\s]/", "", $string);

次に、スコア解除のスペースを変更します

$url = preg_replace('/\s/', '-', $new_string);

最後に、使用できるようにエンコードします

$new_url = urlencode($url);
4
Rooneyl

これを試して

 function clean($string) {
       $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
       $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.

       return preg_replace('/-+/', '-', $string); // Replaces multiple hyphens with single one.
    }

使用法:

echo clean('a|"bc!@£de^&$f g');

出力されます:abcdef-g

ソース: https://stackoverflow.com/a/14114419/2439715

1
Abhishek Goel

これはUnixシェルでそれを行います(私はMacOSでそれを試しました):

$ tr -cs A-Za-z '-' < infile.txt > outfile.txt

より多くのシェル、より少ない卵 のブログ投稿からアイデアを得ました

0
user1484291

以前の回答はすべてURLを扱っていますが、ログインのために文字列をサニタイズしてテキストとして保持する必要がある場合は、次のようにします。

function sanitizeText($str) {
    $withSpecCharacters = htmlspecialchars($str);
    $splitted_str = str_split($str);
    $result = '';
    foreach ($splitted_str as $letter){
        if (strpos($withSpecCharacters, $letter) !== false) {
            $result .= $letter;
        }
    }
    return $result;
}

echo sanitizeText('ОРРииыфвсси ajvnsakjvnHB "&nvsp;\n" <script>alert()</script>');
//ОРРииыфвсси ajvnsakjvnHB &nvsp;\n scriptalert()/script
//No injections possible, all info at max keeped
0
Denis Matafonov

車輪の再発明ではなく、slugifyパッケージを使用する必要があります;)

https://github.com/cocur/slugify

0
DjimOnDev