我正在尝试从字符串中删除禁止的字符。
$forbidden = array( "<", ">", "{", "}", "[", "]", "(", ")", "select", "update", "delete", "insert", "drop", "concat", "script");
foreach ($forbidden as $forbidChar) {
if (preg_match("/$forbidChar/i", $string)) {
return TRUE;
}
return FALSE;
}
但它没有按预期工作,我哪里出错?
答案 0 :(得分:2)
如果您想要替换字符,则需要使用preg_replace()
。 不 preg_match()
。
您可能还希望确保使用preg_quote()
正确转义您的禁用字符。
答案 1 :(得分:2)
您可以使用以下单个正则表达式执行此操作:
$forbidden = array(
"<", ">", "{", "}", "[", "]", "(", ")",
"select", "update", "delete", "insert", "drop", "concat", "script");
$forbidden = array_map( 'preg_quote', $forbidden, array_fill( 0, count( $forbidden), '/'));
return (bool) preg_match( '/' . implode( '|', $forbidden) . '/', $string);
这正确地使用preg_quote()
转义所有字符,并形成一个正则表达式来测试所有情况。
注意:我没有测试过,但它应该可以工作。
答案 2 :(得分:2)
您需要转义字符"[", "]", "(", ")" with "\[", "\]", "\)", "\)"
这是工作代码,
<?php
$string = "dfds fdsf dsfs fkldsk select dsasd asdasd";
$forbidden = array(
"<", ">", "{", "}", "\[", "\]", "\(", "\)",
"select", "update", "delete", "insert", "drop", "concat", "script");
foreach ($forbidden as $forbidChar) {
if (preg_match("/$forbidChar/i", $string)) {
exit('Forbidden char dtected');
return TRUE;
}
return FALSE;
}
?>
答案 3 :(得分:1)
您可以使用performanter string_replace函数执行此操作
<?php
$forbidden = array(
"<", ">", "{", "}", "[", "]", "(", ")",
"select", "update", "delete", "insert", "drop", "concat", "script");
$cleanString = str_ireplace($forbidden, "", $string);
?>