在某些PHP配置中,http_build_query将not_var = yes转换为¬_var= yes。为什么?

时间:2013-01-22 11:36:57

标签: php

此代码:

$query = array(
    "var" => "no",
    "not_var" => "yes",
    "var2" => "maybe"
);
print http_build_query($query);

输出:

var=no¬_var=yes&var2=maybe

这发生在运行PHP 5.3.19的我自己的机器上。我在PHPfiddle上重现了这种行为。它在运行PHP 5.2.11的ideone.com上按预期工作。

为什么会这样?

2 个答案:

答案 0 :(得分:8)

这只是因为您的浏览器对&not实体进行了编码,请尝试以下方法:

print htmlentities(http_build_query($query));

对于正常使用,它绝对没问题。

ideonePHPFiddle之间的差异是因为PHPFiddle只是将结果转储到iframe中,而ideone正在显示实体前编码,以便其他显示器没有坏掉。

答案 1 :(得分:2)

您是否对结果做了“查看源”,或者您是否依赖浏览器来显示它?

实际上,它正在按预期输出字符串;是错误地解释它的浏览器。

该字符串包含&not。浏览器将其解释为HTML实体,尽管它缺少尾随分号。

如果您查看来源,您会看到输出实际上是正确的。

解决方案:如果您希望此字符串包含在HTML页面中,您也应该对其进行htmlencode。