我想使用下一个白名单对$string
进行消毒:
其中包括a-z,A-Z,0-9和帖子[]=+-¿?¡!<>$%^&*'"()/#@*,.:;_|
中包含的一些常用字符。
像á,é,í,ó,ú
和ÁÉÍÓÚ
白名单
abcdefghijklmnñopqrstuvwxyzñáéíóúABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚ0123456789[]=+-¿?¡!<>$%^&*'"()/#@*,.:;_|
我要清理此字符串
$string="//abcdefghijklmnñopqrstuvwxyzñáéíóúABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚ0123456789[]=+-¿?¡!<>$%^&*'()/#@*,.:;_| |||||||||| ] ¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶¸¹º»¼½ mmmmm onload onclick='' [ ? / < ~ # ` ! @ $ % ^ & * ( ) + = } | : ; ' , > { space !#$%&'()*+,-./:;<=>?@[\]^_`{|}~ <html>sdsd</html> ** *`` `` ´´ {} {}[] ````... ;;,,´'¡'!!!!¿?ña ñaña ÑA á é´´ è ´ 8i ó ú à à` à è`ì`ò ù & > < ksks < wksdsd '' \" \' <script>alert('hi')</script>";
我尝试过此正则表达式,但不起作用
//$regex = '/[^\w\[\]\=\+\-\¿\?\¡\!\<\>\$\%\^\&\*\'\"\(\)\/\#\@\*\,\.\/\:\;\_\|]/i';
//preg_replace($regex, '', $string);
有人知道如何根据白名单值清理此字符串吗?
答案 0 :(得分:1)
如果知道您的白名单字符,请在正则表达式中使用白名单,而不要包括黑名单。黑名单可能真的很大。特别是如果编码类似于UTF-8或UTF-16
有很多方法可以做到这一点。一种可能是创建一个具有期望范围(也包括空格和换行)的捕获组的正则表达式,然后用这些组组成一个新字符串。
还要小心一些字符可以保留为正则表达式字符,并且需要转义。就像“ [?+”
您可以像这样测试regex:
$string ="Your test string";
$pattern= "([a-zA-Z0-9\[\]=\+\-\¿\?¡!<>$%\^&\*'\"\sñÑáéíóúÁÉÍÓÚ]+)";
preg_match_all($pattern, $string, $matches);
$newString = join('', $matches);
这是如何与正则表达式一起应用白名单的唯一简单示例。