1

我正在尝试从字符串中删除禁止的字符。

$forbidden = array( "<", ">", "{", "}", "[", "]", "(", ")", "select", "update", "delete", "insert", "drop", "concat", "script");
foreach ($forbidden as $forbidChar) {
    if (preg_match("/$forbidChar/i", $string)) {
        return TRUE;
    }
    return FALSE;
}

但它没有按预期工作,我哪里出错了?

4

4 回答 4

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(),并形成一个正则表达式来测试所有情况。

注意:我还没有测试过,但它应该可以工作。

于 2012-08-09T12:58:38.160 回答
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;
    }
?>
于 2012-08-09T13:02:43.900 回答
2

preg_replace()如果要替换字符,则需要使用。不是 preg_match()

您可能还想确保使用preg_quote().

于 2012-08-09T12:53:30.453 回答
1

您可以使用 performanter string_replace函数来执行此操作

<?php
   $forbidden = array(
        "<", ">", "{", "}", "[", "]", "(", ")",
        "select", "update", "delete", "insert", "drop", "concat", "script");

    $cleanString = str_ireplace($forbidden, "", $string);
?>
于 2012-08-09T12:58:07.537 回答