Php preg_更换更换&;不是字符串中的有趣字符

Php preg_更换更换&;不是字符串中的有趣字符,php,preg-replace,html-entities,Php,Preg Replace,Html Entities,由于某种原因,当preg\u replace看到字符串中的&而不是,并将其替换为,: $url= "http://something?blah=2&you=3&rate=22&nothing=1"; echo preg_replace("/&rate=[0-9]*/", "", $url) . "<br/>"; 您知道为什么会发生这种情况以及如何防止吗?&在使用URI时具有特殊意义。您的URI包含&而不是,它本身就是一个有效的HTML实体。它正在转

由于某种原因,当
preg\u replace
看到字符串中的
&而不是
,并将其替换为

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

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

您知道为什么会发生这种情况以及如何防止吗?

&
在使用URI时具有特殊意义。您的URI包含
&而不是
,它本身就是一个有效的HTML实体。它正在转换为
,因此导致了故障。如
所示,正确地将其转义&;不
,以避免此问题。如果您的数据是从其他地方获取的,您可以使用自动执行此操作。

使用此
&
;代替此
&

因为你的
&否
有特殊的意义

使用此url:

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

然后相应地进行替换

工作正常:可能重复的双引号与HTML实体无关。@kapa:更新了答案。echo preg_replace(“/&;rate=[0-9]*/”,“”,htmlspecialchars($url4))。“
”;顺便问一下,第一个“&”字符呢。。?它的显示方式是这样的..为什么..?@Elavarasan:因为出现的
&
和后面的字符没有特殊意义。问题是我所依赖的数据来自其他地方,因此我无法指定&,而不是&ohh,这听起来很遗憾,那么最好使用正则表达式将这些
&
转换为
&第一:P
http://something?blah=2&amp;you=3&amp;rate=22&amp;nothing=1