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"
答案 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>¤cy / ¤cy</p>
<p>€pe / &europe</p>
&#13;
因此,如果您在HTML中注入URL,请确保对其进行编码:
echo htmlspecialchars(http_build_query($postData));
答案 1 :(得分:0)
当您进行转换时,会发生这种情况,只会影响HTML中的转换时间,因为浏览器会解释&amp;作为一个实体。
如果你通过终端进行,它会抛出预期的结果,但如果你通过浏览器这样做,它确实会向你抛出符号。
您有两个选择:
1 - 您可以更改索引的名称,并以另一种方式在文件中接收索引。
2 - 您可以以相同的方式发送它,无论发生什么,PHP都会以正确的方式解释它。
阅读此How to get ¤ to display literally, not as an HTML entity