将模式值从用户传递到preg_match

时间:2012-09-05 22:54:18

标签: php preg-match

您好我有这段代码,但传递$ pattern变量时preg_match存在问题。

$pattern = htmlspecialchars($_POST['pregmatch']);
$pattern = "'".$pattern."'";
preg_match($pattern, $content, $m);

如果我给这个/<span class=\"product_title\">(.*)<\/span>/ 在$ _POST ['pregmatch']中,pregmatch返回NULL。

如果我将代码更改为此

//$pattern = htmlspecialchars($_POST['pregmatch']);
//$pattern = "'".$pattern."'";
preg_match('/<span class=\"product_title\">(.*)<\/span>/', $content, $m);

就像一个魅力。

那么这笔交易是什么?斜线会产生这个问题吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

您的其他两行似乎都会导致问题...如果您这样做:

preg_match($_POST['pregmatch'], $content, $m); 

你可能会得到理想的结果。

答案 1 :(得分:2)

htmlspecialchars会将输入中的尖括号<>转换为HTML转义符&lt;&gt;。因此,您的模式变为:

/&lt;span class=\"product_title"&gt;(.*)&lt;\/span&gt;/

如果仍然是原始HTML,则与$content不匹配。

在模式周围添加'也会搞砸了:

 $pattern = "'".$pattern."'"; 

然后你有两个分隔符。

'/&lt;span class="product_title"&gt;(.*)&lt;\/span&gt;/'

最好的办法是在不确定变量状态时使用var_dump。只要有什么不起作用,就启用error_reporting