文字列をURLにサニタイズしたいので、これが基本的に必要なものです。
例えば。
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, '-');
}
最初に不要な文字を削除します
$new_string = preg_replace("/[^a-zA-Z0-9\s]/", "", $string);
次に、スコア解除のスペースを変更します
$url = preg_replace('/\s/', '-', $new_string);
最後に、使用できるようにエンコードします
$new_url = urlencode($url);
これを試して
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
これはUnixシェルでそれを行います(私はMacOSでそれを試しました):
$ tr -cs A-Za-z '-' < infile.txt > outfile.txt
より多くのシェル、より少ない卵 のブログ投稿からアイデアを得ました
以前の回答はすべて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
車輪の再発明ではなく、slugifyパッケージを使用する必要があります;)