您好我有这段代码,但传递$ 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);
就像一个魅力。
那么这笔交易是什么?斜线会产生这个问题吗?
提前致谢。
答案 0 :(得分:2)
您的其他两行似乎都会导致问题...如果您这样做:
preg_match($_POST['pregmatch'], $content, $m);
你可能会得到理想的结果。
答案 1 :(得分:2)
htmlspecialchars
会将输入中的尖括号<
和>
转换为HTML转义符<
和>
。因此,您的模式变为:
/<span class=\"product_title">(.*)<\/span>/
如果仍然是原始HTML,则与$content
不匹配。
在模式周围添加'
也会搞砸了:
$pattern = "'".$pattern."'";
然后你有两个分隔符。
'/<span class="product_title">(.*)<\/span>/'
最好的办法是在不确定变量状态时使用var_dump
。只要有什么不起作用,就启用error_reporting
。