http_build_query将`currency`键编码为`¤cy= USD` [重复]

问题描述 投票:-1回答:2

这个问题在这里已有答案:

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

根据要求编辑代码

        $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" 
php
2个回答
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>

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

echo htmlspecialchars(http_build_query($postData));

0
投票

发生的变化是,当您进行转换时,只会影响它在HTML中的时间,因为浏览器会将其解释为当前的实体。

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

你有2个选择:

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.