PHP str_replace在数据数组上使用$amp时的奇怪行为
我有两个URL,其中我想将“&”替换为“&”,将“#”替换为“%23”,因此我想我应该使用:PHP str_replace在数据数组上使用$amp时的奇怪行为,php,arrays,str-replace,Php,Arrays,Str Replace,我有两个URL,其中我想将“&”替换为“&”,将“#”替换为“%23”,因此我想我应该使用: list($upUrl, $downUrl) = str_replace(["&", "#"], ["&", "%23"], [$upUrl, $downUrl]); 但是“&”的替换并没有发生,“&”保持不变。使用str_replace而不使用arays可以正常工作: $upUrl = str_replace("&", "&", $upU
list($upUrl, $downUrl) = str_replace(["&", "#"], ["&", "%23"], [$upUrl, $downUrl]);
但是“&”的替换并没有发生,“&”保持不变。使用str_replace而不使用arays可以正常工作:
$upUrl = str_replace("&", "&", $upUrl);
如果我将“&”更改为另一个字符串,则它可以正常工作。下面是一段代码片段来演示该问题:
<?php
define("NL", "\n<br>");
$upUrl = "upUrl ampersand=& hash=#";
$downUrl = "downUrl ampersand=& hash=#";
echo $upUrl.NL;
echo $downUrl.NL.NL;
list($upUrl, $downUrl) = str_replace(["&", "#"], ["&", "%23"], [$upUrl, $downUrl]);
echo $upUrl.NL;
echo $downUrl.NL.NL;
$upUrl = str_replace("&", "&", $upUrl);
echo $upUrl.NL;
echo $downUrl.NL;
?>
用“\”转义“&”没有什么区别
问题:我是做错了什么,还是这只是PHP的一个怪癖?在浏览器中运行此代码使其看起来好像没有进行替换,但实际上是这样,只是
&代码>(甚至你的“错误的”&
)在浏览器中显示为&
。您的代码按预期工作:
upUrl ampersand=& hash=#
<br>downUrl ampersand=& hash=#
<br>
<br>upUrl ampersand=& hash=%23
<br>downUrl ampersand=& hash=%23
<br>
<br>upUrl ampersand=&amp hash=%23
<br>downUrl ampersand=& hash=%23
<br>
upUrl-ampersand=&hash=#
downUrl符号=&散列=#
upUrl符号与=&散列=%23
downUrl与符号=&散列=%23
upUrl符号AND=&amp哈希=%23
downUrl与符号=&散列=%23
您是从CLI还是从Web服务器运行此脚本?(应该是&;
,而不是&
)(脚本似乎运行正常,从CLI运行它以查看正在进行的替换)我正在W3T的Tryit编辑器中运行此代码段。在现实生活中,我将在我的web服务器上的CGI脚本中运行它(感谢“;”——刚刚错过了它)。目前,我正在运行4个str_replace
语句来替换两个URL中的“&”和“#”,这两个URL都可以工作,但看起来很混乱。这可能是因为浏览器会显示&代码>如&
所示,并且似乎没有进行替换。您的代码片段在命令行上对我来说运行良好。请执行以下操作: