我正在尝试根据允许的来源列表验证页面中的引荐来源。我在最后一个" /"之后提取了引荐来源网址的一部分。现在想要根据有效来源列表进行检查。有效片段的格式为[filename] [?id = nnn],不允许其他字符,例如" view.php?id = 1"没问题" view.php?id = 1& nasty = 1"无效。
我正在尝试的方法是:
$fragOK = preg_match('/'.implode('|', $okSrc).'\?id=[0-9]+$/', $frag);
其中$ okSrc是有效源文件名的数组,$ frag是提取的字符串。显然这有点问题,因为$ fragOK === 1,我上面给出了两个例子。谁能解释一下我哪里出错了?
使用var_dumps进行更新:
----------------------------------------------------
$okSrc
----------------------------------------------------
array(4) {
[0]=>
string(8) "view.php"
[1]=>
string(10) "detail.php"
[2]=>
string(11) "request.php"
[3]=>
string(12) "overview.php"
}
----------------------------------------------------
$frag
----------------------------------------------------
string(21) "view.php?id=1&nasty=1"
答案 0 :(得分:0)
将脚本放在一个组中:
$fragOK = preg_match('/(?:'.implode('|', $okSrc).')\?id=[0-9]+$/', $frag);
// here __^^^ and __^
您可能还想在$ okStr上使用preg_quote
来逃避这些点。
答案 1 :(得分:0)