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()是最好使用的。