正则expression式净化(PHP)
我想净化一个string到一个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);
然后改变空间为unserscores
$url = preg_replace('/\s/', '-', $new_string);
最后编码就可以使用了
$new_url = urlencode($url);
这将在Unix shell中完成(我只是在MacOS上试过):
$ tr -cs A-Za-z '-' < infile.txt > outfile.txt
我从“ 更多壳牌,less蛋”博客文章中获得了这个想法
尝试这个
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
所有以前的asnwers处理url,但万一有人需要清理stringlogin(例如),并保持为文本,这里是你去:
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