http_build_query将`currency`键编码为`¤cy= USD`

时间:2017-12-21 17:39:43

标签: php

http_build_query函数存在奇怪的行为。数组

Array
(
[merchant_id] => 2005197514857165061
[merchant_site_id] => 144033
[currency] => USD
[total_amount] => 1
) 

它转换为

merchant_id=2005197514857165061&merchant_site_id=144033¤cy=USD&total_amount=1

如您所见,代替currency,它编码为¤cy

EDIT 所要求的代码

        $postData['merchant_id'] = $this->merchant_id;
        $postData['merchant_site_id'] = $this->merchant_site_id;
        $postData['currency'] = $transaction['currency'];
        $postData['total_amount'] = $transaction['amount'];
        var_dump($postData);

        var_dump(http_build_query($postData));

和输出

array(4) { ["merchant_id"]=> string(19) "2005197514857165061" ["merchant_site_id"]=> string(6) "144033" ["currency"]=> string(3) "USD" ["total_amount"]=> string(1) "1" } string(83) "merchant_id=2005197514857165061&merchant_site_id=144033¤cy=USD&total_amount=1" 

2 个答案:

答案 0 :(得分:0)

你得到83个字节:

string(83) "merchant_id=2005197514857165061&merchant_site_id=144033¤cy=USD&total_amount=1"

但是,显示的字符串只有77个字符,其中大部分可以安全地假设为单字节。这意味着您实际上是currency而不是¤cy。因此,无关的¤符号必须是进一步后处理的结果。

var_dump()输出包含换行符,您已在一行中共享它,这表明您不会查看生成的HTML代码,而是查看呈现的视图。在HTML中,¤可以编码为¤实体。

出于某种原因,该实体的处理方式与其他实体不同:



<p>&curren;cy / &currency</p>
<p>&euro;pe / &europe</p>
&#13;
&#13;
&#13;

因此,如果您在HTML中注入URL,请确保对其进行编码:

echo htmlspecialchars(http_build_query($postData));

答案 1 :(得分:0)

当您进行转换时,会发生这种情况,只会影响HTML中的转换时间,因为浏览器会解释&amp;作为一个实体。

如果你通过终端进行,它会抛出预期的结果,但如果你通过浏览器这样做,它确实会向你抛出符号。

您有两个选择:

1 - 您可以更改索引的名称,并以另一种方式在文件中接收索引。

2 - 您可以以相同的方式发送它,无论发生什么,PHP都会以正确的方式解释它。

  

阅读此How to get &curren to display literally, not as an HTML entity

这在我的控制台的结果中 enter image description here