我有点困惑。我通过我写的基本清理函数运行所有输入,只允许某些字符,但[]
等字符仍然被允许。
function sanitize($input) {
$pattern = "/[^a-zA-z0-9_-]/";
$filtered = preg_replace($pattern, "", $input);
return $filtered;}
知道为什么会这样做吗?
答案 0 :(得分:7)
答案 1 :(得分:4)
添加其他答案。
[a-zA-Z0-9_]
与\w
相同,单词为char。
因此[^a-zA-Z0-9_-]
可以写成[^\w-]
答案 2 :(得分:2)
你必须把第二个“z”大写:“/ [^ a-zA-Z0-9 _-] /”
答案 3 :(得分:0)
不要理所当然地认为[a-zA-Z0-9_]
与\w
相同。在http://se.php.net/manual/en/regexp.reference.escape.php上,如果发生特定于区域设置的匹配,则表示\w
“可能会有所不同。”