我遇到真正奇怪的代码行为。基本上在应该返回true的preg_match上,下一个语句不会自行执行。让我用我自己的代码演示:preg_match成功后代码循环
foreach($params as $param)
{
error_log("processing $param");
$doesInputContainBadCode = preg_match("/<script\b[^>]*>([\s\S]*?)<\/script>/m",$param);
error_log("input contains bad code? :".$doesInputcontainBadCode);
if($doesInputContainBadCode === 1)
error_log("process this input");
}
说,如果我的$参数数组组成:
$params = {"first_name","last_name","middle_name","<script type="text/javascript">alert("javascript massacre");</script>", "whatever", "something else"}
这就是error_log中显示:
processing first_name
input contains bad code? : 0
processing last_name
input contains bad code? : 0
processing middle_name
input contains bad code? : 0
processing <script type="text/javascript">alert("javascript massacre");</script>
processing whatever
注意如何处理后“javascript”包含参数,它跳过了error_log。它应该有记录 输入包含错误代码? :1个 处理此输入
然而,没有被记录。至少,我认为它必须记录:
输入包含错误代码? :
不管preg_match结果的结果如何。但它显然没有,它不仅仅是为了这个输入,而是重复了preg_match成功执行这个行为的任何输入。
PHP documentation指出preg_match根据preg_match成功还是失败返回1或0,如果发生错误,则返回false。不知道发生了什么在这里,如果有人能在正确的方向
嗯,你是不是'break'ing出你的循环的早期.... – 2013-04-23 16:37:46
不知道我跟着 – 2013-04-23 16:38:02
在标题扫视(“代码循环后的preg_match成功”),并在你的'foreach'循环,循环中没有'break'语句。因此,循环将遍历整个'$ param'数组,不管您的正则表达式是否生成匹配。 – 2013-04-23 16:39:07