【问题标题】:preg_replace replacing &not in string to funny characterpreg_replace 将字符串中的 &quot 替换为有趣的字符
【发布时间】:2014-04-09 10:05:35
【问题描述】:

由于某种原因,当preg_replace 在字符串中看到&not 并将其替换为¬

$url= "http://something?blah=2&you=3&rate=22&nothing=1";

echo preg_replace("/&rate=[0-9]*/", "", $url) . "<br/>";

但是输出如下:

http://something?blah=2&you=3¬hing=1      // Current result
http://something?blah=2&you=3&nothing=1   // Expected result

任何想法为什么会发生这种情况以及如何防止它?

【问题讨论】:

标签: php preg-replace html-entities


【解决方案1】:

&amp; 在使用 URI 时具有特殊含义。您的 URI 包含 &amp;amp;not,它本身就是一个有效的 HTML 实体。它正在转换为¬,因此造成了麻烦。将它们正确地转义为&amp;amp;not 以避免此问题。如果您的数据是从其他地方获取的,您可以使用htmlspecialchars() 自动执行此操作。

【讨论】:

  • 双引号与 HTML 实体无关。
  • @kapa:更新了答案。
  • echo preg_replace("/&rate=[0-9]*/", "", htmlspecialchars ($url4))."
    ";
  • 顺便说一句,第一个“&”字符呢?它显示为 ..why ..?
  • @Elavarasan:因为&amp;的出现和后面的字符没有特殊含义。
【解决方案2】:

使用这个&amp;amp;代替这个&amp;amp;

因为你的&amp;no有特殊意义

使用这个网址:

http://something?blah=2&amp;you=3&amp;rate=22&amp;nothing=1

然后相应地进行替换

【讨论】:

  • 问题是我依赖的数据来自其他地方,所以我不能指定 &amp 而不是 &
  • 哦,听到这个消息很难过,然后最好使用正则表达式将那些 &amp;amp; 转换为 &amp;amp;first :P
猜你喜欢
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多