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

あなたはキャラクターを脱出する必要があります"[", "]", "(", ")" 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 に答える
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 に答える
1

これを行うには、 performanterstring_replace関数を使用できます

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

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