我有两个URLS,我想在其中替换'&'与'&'和'#'与'%23',所以我想我会使用:
list($upUrl, $downUrl) = str_replace(["&", "#"], ["&", "%23"], [$upUrl, $downUrl]);
但是替换'&"amp;"不会发生未受影响。在没有arays的情况下使用str_replace工作正常:
$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>
https://3v4l.org/6sPSR