Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP str_replace在数据数组上使用$amp时的奇怪行为_Php_Arrays_Str Replace - Fatal编程技术网

PHP str_replace在数据数组上使用$amp时的奇怪行为

PHP str_replace在数据数组上使用$amp时的奇怪行为,php,arrays,str-replace,Php,Arrays,Str Replace,我有两个URL,其中我想将“&”替换为“&”,将“#”替换为“%23”,因此我想我应该使用: list($upUrl, $downUrl) = str_replace(["&", "#"], ["&amp", "%23"], [$upUrl, $downUrl]); 但是“&”的替换并没有发生,“&”保持不变。使用str_replace而不使用arays可以正常工作: $upUrl = str_replace("&", "&amp", $upU

我有两个URL,其中我想将“&”替换为“&”,将“#”替换为“%23”,因此我想我应该使用:

list($upUrl, $downUrl) = str_replace(["&", "#"], ["&amp", "%23"], [$upUrl, $downUrl]);
但是“&”的替换并没有发生,“&”保持不变。使用str_replace而不使用arays可以正常工作:

$upUrl = str_replace("&", "&amp", $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(["&", "#"], ["&amp", "%23"], [$upUrl, $downUrl]);

echo $upUrl.NL;
echo $downUrl.NL.NL;

$upUrl = str_replace("&", "&amp", $upUrl);

echo $upUrl.NL;
echo $downUrl.NL;

?>

用“\”转义“&”没有什么区别


问题:我是做错了什么,还是这只是PHP的一个怪癖?

在浏览器中运行此代码使其看起来好像没有进行替换,但实际上是这样,只是
&(甚至你的“错误的”
&
)在浏览器中显示为
&
。您的代码按预期工作:

upUrl ampersand=& hash=#
<br>downUrl ampersand=& hash=#
<br>
<br>upUrl ampersand=&amp hash=%23
<br>downUrl ampersand=&amp hash=%23
<br>
<br>upUrl ampersand=&ampamp hash=%23
<br>downUrl ampersand=&amp 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都可以工作,但看起来很混乱。这可能是因为浏览器会显示
&
&
所示,并且似乎没有进行替换。您的代码片段在命令行上对我来说运行良好。请执行以下操作: