开发者

Why won't this ampersand matching regexp work?

I need to use this PHP snippet to convert & to ampersand. I am using the exact same test code as Paul Dixon has written it, but no ampersands are replaced in my code. Why? I am using PHP 5.2.6.

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

The following, simpler but incorrect (it will also replace开发者_JS百科 the & in &) regexp works:

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

EDIT: Damnit, the issue isn't regexp/PHP related but Drupal! Yes, I am using this snippet in a Drupal module and for some reason Drupal converts & to &.


If Drupal is replacing & with & you can just double escape the entity:

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

Then Drupal will output & which was your desired result.


What about using str_replace('&', '&amp ;', $str)?


Could you give us an example input string?

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

correctly produces

Dogs & Cats & budgies
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜