-1

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

$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);

奇迹般有效。

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

提前致谢。

4

2 回答 2

2

您的两条附加线似乎都导致了问题……如果您要这样做:

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

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

于 2012-09-05T22:57:15.647 回答
2

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

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

$content如果那仍然是原始 HTML,这将不匹配。

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

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

然后你有两个分隔符。

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

最好的办法是var_dump在不确定可变状态时使用。error_reporting并在某些事情不起作用时启用。

于 2012-09-05T23:54:42.157 回答