正则表达式替换&符号而不是html实体

时间:2010-11-16 02:08:47

标签: php regex

在下面的代码中,我想用“和”替换普通的&符号,而忽略用作html实体一部分的&符号(例如:“)

我在http://www.gskinner.com/RegExr/处测试了我的表情&(?!([\ w \ n] {2,7} |#[\ d] {1,4});)并且匹配我想要的是什么。

但是,当我运行此代码时,结果为空。

$content = "" Apples & Oranges "";
$content = preg_replace("/&(?!([\w\n]{2,7}|#[\d]{1,4});)/g","and",$content); 

echo $content;

我的方法是以某种方式存在缺陷还是只是出现语法问题?

3 个答案:

答案 0 :(得分:1)

删除g标志,它应该可以正常工作。

请注意,在我看来,你期望和&符号被包围的空格,所以以下可能是一个简化的解决方案:

$content = preg_replace("/\s/&\s/"," and ",$content); 

虽然我意识到这可能允许错误输入的文本导致编码错误。如果缺少空间。

答案 1 :(得分:1)

你不能一贯地做到这一点。如果有人包括& amp;你怎么知道?希望它真的打印“& amp;”还是一个&符?不要尝试混合转义......这条路径就是跨站点脚本攻击。

(奇怪的是,stackoverflow也进行了半编码,它打破了我的帖子。克雷金斯。)

答案 2 :(得分:1)

PHP不知道g-modificator,只需在regexp声明后删除g。这有效:

$content = "" Apples & Oranges "";
$content = preg_replace("/&(?!([\w\n]{2,7}|#[\d]{1,4});)/","and",$content); 

echo $content;