2012-09-05 2 views
-1

Привет, у меня есть этот код, но есть проблема с preg_match при передаче переменной $ pattern.Передача значения шаблона от пользователя к preg_match

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

если я даю это в $ _POST [ ''] pregmatch pregmatch возвращает NULL /<span class=\"product_title\">(.*)<\/span>/ .

Если я изменить код для этого

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

работает как шарм.

Итак, в чем заключена сделка? Слэши создают эту проблему?

Заранее спасибо.

+0

Какое значение содержит переменную 'content'? –

ответ

2

Оба ваших дополнительных линий по всей видимости, вызывает проблемы ... если вы должны были сделать:

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

Вы, вероятно, получить желаемый результат.

+0

Хорошо, спасибо. –

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 всякий раз, когда что-то не работает.

Смежные вопросы