Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 准备移除被禁止的角色吗?_Php_Regex_Preg Match - Fatal编程技术网

Php 准备移除被禁止的角色吗?

Php 准备移除被禁止的角色吗?,php,regex,preg-match,Php,Regex,Preg Match,我正试图从一根绳子上取下禁止使用的字符 $forbidden = array( "<", ">", "{", "}", "[", "]", "(", ")", "select", "update", "delete", "insert", "drop", "concat", "script"); foreach ($forbidden as $forbidChar) { if (preg_match("/$forbidChar/i", $string)) {

我正试图从一根绳子上取下禁止使用的字符

$forbidden = array( "<", ">", "{", "}", "[", "]", "(", ")", "select", "update", "delete", "insert", "drop", "concat", "script");
foreach ($forbidden as $forbidChar) {
    if (preg_match("/$forbidChar/i", $string)) {
        return TRUE;
    }
    return FALSE;
}
$probled=array(“”、“{”、“}”、“[”、“]”、“(“、”)、“选择”、“更新”、“删除”、“插入”、“删除”、“连接”、“脚本”);
foreach($forbidden为$forbiddechar){
if(preg_匹配(“/$probleChar/i”,$string)){
返回TRUE;
}
返回FALSE;
}

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

如果要替换字符,需要使用
preg\u replace()
预匹配()


您可能还希望确保使用
preg_quote()

正确转义禁止的字符。如果您希望替换字符,则需要使用
preg_replace()
预匹配()


您可能还希望确保使用
preg_quote()

正确转义禁止字符。您可以使用performanter函数执行此操作

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

    $cleanString = str_ireplace($forbidden, "", $string);
?>

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

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

    $cleanString = str_ireplace($forbidden, "", $string);
?>

您可以用一个正则表达式执行此操作,如下所示:

$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);
$probidden=数组(
"", "{", "}", "[", "]", "(", ")",
“选择”、“更新”、“删除”、“插入”、“删除”、“合并”、“脚本”);
$probled=array_map('preg_quote',$probled,array_fill(0,count($probled),'/');
return(bool)preg_match(“/”.内爆(“|”),$probled.“/”,$string);
这将使用
preg_quote()
正确地转义所有字符,并形成一个正则表达式来测试所有情况


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

您可以用一个正则表达式来完成这项工作,如下所示:

$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);
$probidden=数组(
"", "{", "}", "[", "]", "(", ")",
“选择”、“更新”、“删除”、“插入”、“删除”、“合并”、“脚本”);
$probled=array_map('preg_quote',$probled,array_fill(0,count($probled),'/');
return(bool)preg_match(“/”.内爆(“|”),$probled.“/”,$string);
这将使用
preg_quote()
正确地转义所有字符,并形成一个正则表达式来测试所有情况


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

您需要将字符
“[”,“]”,“(“,”)转义为“\[”,“\]”,“\),“\)”

这是工作代码

<?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;
    }
?>

您需要用“\[”、“\]”、“\”、“\”、“\”)转义字符
“[”、“[”、“\)、“\)”

这是工作代码

<?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;
    }
?>


感谢您的回复,我不希望它们被替换,我只想返回是否有禁止字符。@Sarah在这种情况下,在传递变量之前使用
preg_quote()
。感谢您的回复,我不希望它们被替换,我只想返回是否有禁止字符。@Sarah在这种情况下,在传递变量之前使用
preg_quote()
。在
$probled
中有regex元字符。除非你逃离他们,否则这是行不通的。此外,这可以在单个正则表达式中完成。查看
preg\u replace
,然后像这样编写
“/$forbitchar/i”
“/.”$forbitchar.'/i'
,我不确定这是否是一个问题,但
$
符号在表达式中并不是毫无意义的,因此它可能会在这里引起歧义,可能是
“/{$forbitchar}/i”
可以使用,但大括号也可能被认为是不明确的。在
$probled
中有regex元字符。除非你逃离他们,否则这是行不通的。此外,这可以在单个正则表达式中完成。查看
preg\u replace
,然后像这样编写
“/$forbitchar/i”
“/.”$forbitchar.'/i'
,我不确定这是否是一个问题,但
$
符号在表达式中并不是毫无意义的,因此它可能会在这里引起歧义,可能是
“/{$forbitchar}/i”
可以,但是大括号也可能被认为是不明确的。我使用preg_quote()来转义字符。好的。preg_quote()是最好的用法。我用preg_quote()来转义字符。好的。preg_quote()是最好使用的。