【问题标题】:How to return {"a": "\u0002"} to browser in php?如何在 php 中返回 {"a": "\u0002"} 到浏览器?
【发布时间】:2021-12-19 11:45:36
【问题描述】:

我想向浏览器发送一些数据,我编写如下代码。

<?php
$arr = array('a'=> "\u0002 hello");

exit(json_encode($arr));
?>

我得到一个结果:

但我想要如下结果,\u0002 不是 \\u0002,我该怎么办?

【问题讨论】:

  • "\u0002" 在 PHP 中不是代码为 2 的字符(为什么使用它?),而是一个包含 \u 和四个数字的字符串。
  • 将给定的数据编码为 JSON,必须转义这个反斜杠。如果您只想获得\u0002 in 您的 JSON - 那么您需要提供 proper 输入数据,json_encode 将首先转换为此。
  • 您真正想发送什么?如果你想要一个包含\u0002 的字符串并且你发送它是 JSON 编码的,那么 \ 必须被转义。目前尚不清楚您是否打算直接发送\u0002 或者您是否有其他角色

标签: php


【解决方案1】:

PHP 中的"\u0002" 不是代码为 2 的字符(为什么要使用它?),而是一个包含 \u 和四个数字的字符串。

使用chr() 函数从其数字代码中生成一个字符。

$arr = array('a'=> chr(2)." hello");
echo(json_encode($arr));

查看online

【讨论】:

    【解决方案2】:

    \u#### 是 JSON 的 unicode 转义格式,在 PHP 字符串中没有任何意义。

    使用 PHP 的实际 unicode 转义:

    $arr = array('a'=> "\u{0002} hello");
    

    或者,由于128 / 0x80 以下的代码点具有单字节表示,您可以避免:

    $arr = array('a'=> "\x02 hello");
    

    两者都会产生所需的输出:{"a":"\u0002 hello"}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 2018-06-06
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      相关资源
      最近更新 更多