Обратные ссылки в PHP preg_replace () нестабильны?

0

Чтобы избежать двойных или одинарных кавычек, я использовал обратные ссылки регулярных выражений:

$strVal = '<div class="xclassname">Contents</div>';
$strVal = preg_replace("/([\"\'])/", "\\\\1", $strVal);

Обычно это давало мне эту строку (с тех пор):

"<div class=\"xclassname\">Contents</div>"

с двойными кавычками, правильно сбежавшими в стиле C++.

Но сегодня мой PHP 5.5.3 дает мне этот результат:

"<div class=\1xclassname\1>Contents</div>"

с двойными кавычками, замененными строкой bad\1.

Теперь я должен использовать это:

$strVal = preg_replace("/([\"\'])/", "\\\\\${1}", $strVal);

preg_replace() нестабилен в моей ОС Windows 7, иногда он дает один результат, в другие дни он дает другое?

Вы столкнулись с такой ситуацией и почему?

ДОБАВЛЕНО:

Я забыл, что мы обновили PHP 5.3 до PHP5.5.3 несколько недель назад, preg_repace() нестабильно в соответствии с версиями PHP, а не в функции даты-времени:

preg_replace("/([\"\'])/", "\\\\1", $strVal); // is OK for PHP5.3.x, but
preg_replace("/([\"\'])/", "\\\\1", $strVal); // is bad for PHP5.5.x.
preg_replace("/([\"\'])/", "\\\\\${1}", $strVal); // is good for PHP5.5.x.

Что это, у меня нет нескольких версий PHP, можете ли вы подтвердить?

Теги:

1 ответ

2
Лучший ответ

preg_* функции лучше работают с $1 в первую очередь, и рекомендуется использовать их. Тем не менее, почему бы просто не использовать addslashes для этой задачи?

  • 0
    "1 доллар на первом месте", это не ясно, не могли бы вы привести пример?
  • 0
    После теста addlashes () действительно хорошо справляется, preg_replace () тоже.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню