在下面的代码中,我想用“和”替换普通的&符号,而忽略用作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;
我的方法是以某种方式存在缺陷还是只是出现语法问题?
答案 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;