PHP str_replace 在数据数组上使用 $amp 的奇怪行为
Odd behaviour with PHP str_replace using $amp on arrays of data
我有 2 个 URL,其中我想将“&”替换为“&”,将“#”替换为“%23”,所以我想使用:
list($upUrl, $downUrl) = str_replace(["&", "#"], ["&", "%23"], [$upUrl, $downUrl]);
但是“&”的替换没有发生——“&”保持不变。在没有数组的情况下使用 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 的怪癖?
运行 浏览器中的这段代码使它 看起来像 没有进行任何替换,但它们实际上是,只是 &
(甚至您的 "faulty" &
) 在浏览器中显示为 &
。您的代码按预期工作:
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>
我有 2 个 URL,其中我想将“&”替换为“&”,将“#”替换为“%23”,所以我想使用:
list($upUrl, $downUrl) = str_replace(["&", "#"], ["&", "%23"], [$upUrl, $downUrl]);
但是“&”的替换没有发生——“&”保持不变。在没有数组的情况下使用 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 的怪癖?
运行 浏览器中的这段代码使它 看起来像 没有进行任何替换,但它们实际上是,只是 &
(甚至您的 "faulty" &
) 在浏览器中显示为 &
。您的代码按预期工作:
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>