我遇到了非常奇怪的代码行为。本质上,在应该返回 true 的 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 数组包含:
$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 文档指出 preg_match 返回 1 或 0 取决于 preg_match 是成功还是失败,如果有错误则返回 false。不知道这里发生了什么,如果有人能指出我正确的方向