4

这段代码:

$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上按预期工作。

为什么会这样?

4

2 回答 2

8

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

print htmlentities(http_build_query($query));

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

ideone它在vs上不同的原因PHPFiddle是因为PHPFiddle只是将结果转储到 iframe 中,并ideone显示它是预先编码的实体,这样其他显示就不会被破坏。

于 2013-01-22T11:44:14.170 回答
2

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

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

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

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

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

于 2013-01-22T11:46:12.907 回答