【问题标题】:Avoiding the conversion of HTML entities in http_build_query in php避免php中http_build_query中HTML实体的转换
【发布时间】:2017-10-23 03:17:17
【问题描述】:

防止 HTML 实体的转换。

请看下面的代码:

$array = array(
  "id" => 123456,
  "currency" => "EUR",
);

var_dump(http_build_query($array));

//OUTPUT:
string 'id=123456&currency=EUR' (length=22)

好的,这行得通。但是有些服务器给了我这个输出:

string(25) "pspid=123456¤cy=EUR"

因此,某些服务器将&curren 视为 HTML 实体。但我不想那样。

如何避免不必要的 HTML 实体转换?

【问题讨论】:

  • 这只是输出。如果您将此网址传递给服务器 - 一切都会好起来的
  • 您使用的是什么 php 版本? http_build_query 在不同 php 版本中的工作方式存在一些差异
  • @u_mulder 是的,但是为什么&curren 被转换为实体而在其他服务器上却没有被转换?
  • @lloiacono php 5.3.10 ...不是最新版本哈哈
  • @Julian 看看这个eval.in/803318

标签: php html url html-entities


【解决方案1】:

解决方案很简单。 只需在输出上使用htmlentities

ini_set("display_errors", 1);
$array = array(
  "id" => 123456,
  "currency" => "EUR",
);
print_r(http_build_query($array));
echo PHP_EOL;
print_r(htmlentities(http_build_query($array)));

//OUTPUT:
id=123456&currency=EUR
id=123456&currency=EUR

链接: https://eval.in/803318

【讨论】:

    【解决方案2】:

    检查您的 php 版本,因为:

    PHP 5.3.1(错误行为)http_build_query 确实会转义连接参数的“&”和号字符。示例:user_id=1&setting_id=2。

    PHP 5.4+ http_build_query 不会转义连接参数的“&”符号。示例:user_id=1&setting_id=2

    更多详情请查看:https://stackoverflow.com/a/42317655/1016425

    【讨论】:

      猜你喜欢
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多