Почему этот амперсанд не соответствует регулярному выражению? - PullRequest
0 голосов
/ 15 января 2011

Мне нужно использовать этот PHP фрагмент для преобразования & в амперсанд.Я использую тот же тестовый код, который написал Пол Диксон, но в моем коде не заменяются амперсанды.Зачем?Я использую PHP 5.2.6.

$str_fix = preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $str);

Следующее, более простое, но неправильное (оно также заменит & в &) регулярное выражение работает:

$str_fix = preg_replace('/&/', '&', $str);

РЕДАКТИРОВАТЬ: Черт, проблема не в regexp / PHP, а в Drupal!Да, я использую этот фрагмент в модуле Drupal и по какой-то причине Drupal конвертирует & в &.

Ответы [ 3 ]

1 голос
/ 15 января 2011

Если Drupal заменяет & на &, вы можете просто дважды убрать сущность:

$str_fix = preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $str);

Тогда Drupal выдаст &, который был желаемым результатом.

0 голосов
/ 15 января 2011

Не могли бы вы привести пример входной строки?

echo preg_replace('/&(?!#?[a-z0-9]+;)/', '&', "Dogs & Cats & budgies\n");

правильно выдает

Dogs & Cats & budgies
0 голосов
/ 15 января 2011

А как насчет использования str_replace ('&', '&;', $ str)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...