参考:为什么我使用 json_encode 编码的“特殊”Unicode 字符很奇怪?

2024-01-05

当使用“特殊”Unicode 字符时,它们在编码为 JSON 时会变成奇怪的垃圾:

php > echo json_encode(['foo' => '馬']);
{"foo":"\u99ac"}

为什么?我的编码有问题吗?

(This is a reference question to clarify the topic once and for all, since this comes up again and again.)


首先:这里没有什么问题。人物是这样的can以 JSON 形式编码。它是在官方 http://www.json.org standard http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf。它基于如何在 Javascript ECMAScript 中形成字符串文字(第 7.8.4 节“字符串文字” http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf)并描述如下:

任何代码点都可以表示为十六进制数。这种数字的含义由 ISO/IEC 10646 确定。如果代码点位于基本多语言平面(U+0000 到 U+FFFF)中,则它可以表示为六字符序列:反斜线、后面跟着小写字母 u,再后面是编码代码点的四个十六进制数字。 [...] 因此,例如,仅包含单个反斜线字符的字符串可以表示为“\u005C”。

简而言之:任何字符都可以编码为\u...., where ....是字符的 Unicode 代码点(对于 BMP 之外的字符,是 UTF-16 代理项对的一半的代码点)。

"馬"
"\u99ac"

这两个字符串文字代表完全相同的字符,它们绝对等效。当这些字符串文字被兼容的 JSON 解析器解析时,它们都会生成字符串“马”。他们不look一样,但是他们meanJSON 数据编码格式也是如此。

PHP's json_encode http://php.net/json_encode最好使用编码非 ASCII 字符\u....转义序列。从技术上讲,它不必这样做,但确实如此。结果是完全有效的。如果您希望在 JSON 中使用文字字符而不是转义序列,则可以设置JSON_UNESCAPED_UNICODEPHP 5.4 或更高版本中的标志:

php > echo json_encode(['foo' => '馬'], JSON_UNESCAPED_UNICODE);
{"foo":"馬"}

强调一下:这只是一个偏爱,没有必要以任何方式在 JSON 中传输“Unicode 字符”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

参考:为什么我使用 json_encode 编码的“特殊”Unicode 字符很奇怪? 的相关文章

  • PHP 的password_verify() 是否可以抵御极长的密码(DoS 攻击)?

    一般攻击场景 2013 年 Django 存在一个普遍漏洞 攻击者可以通过非常大的密码创建极其密集的 CPU 计算 请参阅此处的安全通知 https www djangoproject com weblog 2013 sep 15 secu
  • PHP-MySQLi 连接随机失败并显示“无法分配请求的地址”

    大约两周以来 我一直在处理 LAMP 堆栈中最奇怪的问题之一 长话短说 与 MySQL 服务器的随机连接失败并显示错误消息 Warning mysqli real connect HY000 2002 Cannot assign reque
  • PHP 异常处理与 C#

    这是一个非常基本的问题 我希望如此 我所做的大部分异常处理都是使用 C 进行的 在 C 中 任何在 try catch 块中出错的代码都会由 catch 代码处理 例如 try int divByZero 45 0 catch Except
  • Codeigniter PHP - 在锚点加载视图

    我在一个长页面的底部有一个表单 如果用户填写了表单但它不验证页面是否以典型的 codeigniter 方式重新加载 this gt load gt view template data 然而 由于表单位于页面底部 我需要将页面加载到那里 就
  • 用 PHP 截断文件末尾

    我有一个日志文件 我想在 PHP 读取该文件后将其截断 我的代码目前如下所示 fp fopen file r ftruncate fp 125000 fclose fp 但是 这会通过保留first1MB 不过 我想保留last1Mb 的文
  • Laravel 5.4 将json保存到数据库

    帮我将 json 保存到数据库 表字段类型 文本 我有带有强制转换数组的模型 class Salesteam extends Model protected casts team members gt array 我想要像这样 index
  • zend 表单验证

    我想知道 Zend Form 如何验证输入 我的意思是它如何知道要验证哪些输入字段 我查看了 php 全局变量 POST GET 但没有看到任何设置为标识符 例如 的内容 以便了解如何验证 有人能给我推荐一些关于这些东西的指南吗 好吧 找出
  • 转义用户数据,无需魔法引号

    我正在研究如何在来自外部世界的数据被用于应用程序控制 存储 逻辑等之前正确地对其进行转义 显然 随着 magic quote 指令在 php 5 3 0 中很快被弃用 并在 php6 中被删除 对于任何想要升级并进入新语言功能 同时维护遗留
  • 使用 PHP 更新 XML 节点

    我有一个 XML 文件 test xml
  • 如何使用 php DOM 获取 内的值?

    我如何使用 php DOM 获取 内的值 这是我的 xml 中的一些代码
  • DataTables 第 2 页的分页未调用放大弹出窗口

    所以我有这个启用分页的数据表 我编码了一种方式 以便用户可以编辑表的行 当用户调用它在放大弹出窗口中打开的编辑页面时 它在第 1 页 从第 2 页起都运行良好 DataTable 及其前面停止调用 Magnific Popup 我只是不明白
  • 查明具有特定 ID 的会话是否已过期

    我正在创建一个上传功能 将用户上传的文件存储在服务器上 并以用户的会话 ID 作为名称 现在 我只想将此文件保留在服务器上 直到该会话处于活动状态 所以 我的问题是 如何根据会话 ID 确定会话是活动的还是过期的 以便在后一种情况下我可以安
  • Memcache 不会刷新或清除内存

    我一直在尝试清除我的内存缓存 因为我注意到使用时存储占用了近 30 的服务器内存ps aux 所以我运行了以下 php 代码 memcache new Memcache memcache gt connect localhost 11211
  • php隐藏所有错误[重复]

    这个问题在这里已经有答案了 隐藏的最佳做法是什么allPHP 错误 因为我不想向用户显示错误 我尝试过使用 htacess通过输入代码php flag display errors off在那里 但它返回给我一个500 error 还有其他
  • Laravel,控制器中的 Auth::user()

    Laravel 框架 为什么我无法在 laravel 项目的控制器中使用 Auth user 查看用户是否已登录 Session 是否未连接到控制器 HomeController php public function isauthoriz
  • 控制数据是否存在于数组中

    我在mysql中有两个不同的表 我正在使用curl从json文件中获取数据 我的第一个表名称是 tblclients 该表存储客户端数据 我的第二个表名称是 tblcustomfieldsvalues 该表使用 tblclients 表的
  • WordPress - 类别和子类别的嵌套列表

    我正在尝试显示带有嵌套子类别的 WordPress 类别列表 到目前为止 我只能获取父类别列表或不包括父类别的子类别列表 但我无法将两者连接在一起 这是我想要创建的结果 Parent Category 子类别 子类别 Parent Cate
  • sqlite3和pdo_sqlite有什么区别

    我正在将我的 Web 应用程序从 MySQL 迁移到 SQLite 数据库 我发现有两个 PHP 扩展用于与 sqlite 通信 php sqlite3 dll and php pdo sqlite dll 什么扩展比较好 或者另一个问题
  • PHP 中根据相似值对数组进行分组

    我有一个具有以下结构的数组
  • PHP date() 和 strtotime() 返回错误的月份 31 日

    我在用着date and strtotime 函数在下拉列表中显示接下来的 3 个月 PHP代码 echo date m Y strtotime 0 months echo date m Y strtotime 1 months echo

随机推荐

  • 使用带有 $ 的逻辑向量对数据帧进行子集化

    我无法理解使用原因 and behavior of the 子集 a 中的符号data frame下面的例子是在我正在参加的初学者课程中提出的 不是现场教授 所以不能在那里询问 temp mat lt matrix 1 9 nrow 3 c
  • 如何使用嵌套的 NSDate 属性将 Realm 对象转换为 JSON?

    我有一个带有多个嵌套的嵌套 Realm 对象NSDate嵌套对象中的属性 我在用这个答案 https stackoverflow com questions 32023249 how can i convert a realm object
  • 归一化编辑距离公式解释

    基于本文 IEEE PAITERN 分析交易 归一化编辑距离的计算及应用本文归一化编辑距离 http www csie ntu edu tw b93076 Computation 20of 20Normalized 20Edit 20Dis
  • 超级模糊纹理 - XNA

    当我近距离观察纹理时 我的纹理似乎变得非常模糊 我正在创建一个类似 Minecraft 的地形 我希望纹理能够像素化 就像它是制作出来的一样 而不是 XNA 尝试为我平滑它 它的显示方式如下 任何建议将不胜感激 它与抗锯齿无关 它与硬件如何
  • JS 对象按键顺序

    即使将新值分配给某个键 javascript 是否也能保证保留对象的键序列 例如 如果我有以下对象 var Object keyX value1 keyB value2 keyZ value3 如果我使用迭代键for in 我得到正确的顺序
  • 向 Magento 中的属性选项添加新值

    我正在尝试使用脚本向 Magento 中的属性选项添加新值以加快该过程 因为我有 2 000 多个制造商 这是我用来执行此任务的一段代码 创建自定义模块 使用模块创建器 http www magentocommerce com extens
  • JAXBContextFactory 地狱 - java.lang.ClassNotFoundException:com.ibm.xml.xlxp2.jaxb.JAXBContextFactory

    我在我的开发环境中不断收到以下错误 我用 火星日食 4 5 1 Oracle JDK 1 7 内部版本 1 7 0 79 b15 或 1 8 内部版本 1 8 0 65 b17 Apache Ant 运行代码以及 Eclipse 运行代码
  • ELF 格式操作

    我有一个要求 我想关联一个index与一个文件 以某种格式 我想知道我是否可以进行任何 ELF 操作 并且仍然确保保持一致性 以便该文件在 Linux 上正常工作 这里的想法是创建一种文件格式 可以通过某个 API 自定义 查询该文件格式以
  • GWT - 如何在超级开发中查看java异常堆栈跟踪?

    我正在使用 GWT Super Dev 并在 Chrome 中激活了源映射 尽管我可以在 源 选项卡中看到 Java 类 但我不知道如何查看未处理异常的完整堆栈跟踪 那么我该怎么做呢 有一个悬而未决的问题 http code google
  • 给定一个数组 [a1b2c3d4] 转换为 [abcd1234]

    限制条件 O 1 空间 准时 这不是一个家庭作业问题 只是我遇到的一个有趣的问题 以下是我能想到的一些解决方案 但在给定的限制下没有任何解决方案 Method 1 具有 O n 内存 递归地将数组分为两部分 继续划分直到每个子问题的大小 对
  • 是否可以构建一个交互式 C shell?

    我只是想知道这是否可以使用 Python Java 或 C 我正在寻找类似 IPython for Python 的东西 是的 这样的东西已经存在 你只需要用谷歌搜索即可 Ch http en wikipedia org wiki Ch i
  • 如何在从另一个活动返回时保留 Recyclerview 的滚动位置?

    我看到了很多关于这个主题的相关问题 但没有一个对我有帮助 我正在使用一个交错网格布局对于我的 RecyclerView 显示cards 每个 CardView 都会打开一个新活动 我面临的问题是 在从该新活动返回时 RecyclerView
  • React - 无法使用 CSS 模块设置 React 路由器导航链接的活动状态样式

    Goal 我正在尝试使用 css 模块将样式应用到侧栏中的活动路线 但是我想保留基本样式 分配 2 个类 我试过这段代码
  • x 轴上时间戳的格式

    我正在尝试格式化天气数据图中的 x 轴 我对 y 轴很满意 但我所有将 x 轴变成合适的 人类可读格式的尝试到目前为止都不起作用 因此 经过几个小时的尝试和错误 我希望对您有所帮助 我想要实现的目标 最后 我希望每 30 分钟有一个刻度线
  • 如何在 Windows 上更新 npm?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 I tried this http davidwalsh name upgrade no
  • 从 python **快速** 截取屏幕截图

    A PIL Image grab 大约需要0 5秒 这只是将数据从屏幕获取到我的应用程序 而不需要我进行任何处理 FRAPS http www fraps com 另一方面 可以拍摄高达 30 FPS 的屏幕截图 有什么方法可以让我在 Py
  • open_basedir, File() 不在允许的路径内

    我在使用安装在 Media Temple DV 上的 Laravel 时遇到问题 tempnam open basedir restriction in effect File is not within the allowed path
  • 如何使用 PCL 打印

    我有 Xerox workcenter 7120 这台打印机位于网络上 我想打印pdf文件与PCL命令来自Linux主持人 我的打印机支持PCL 但我不知道如何在打印机上发送打印作业PCL 我找到了这个文件如何解释所有PCL命令pcl命令施
  • 在GCS存储桶名称中使用project-id有什么风险?

    我一直在我的 GCS 存储桶名称中使用项目 ID 作为前缀 以便轻松获得唯一的名称 当我阅读时GCS 最佳实践 https cloud google com storage docs best practices naming 它明确表示不
  • 参考:为什么我使用 json_encode 编码的“特殊”Unicode 字符很奇怪?

    当使用 特殊 Unicode 字符时 它们在编码为 JSON 时会变成奇怪的垃圾 php gt echo json encode foo gt 馬 foo u99ac 为什么 我的编码有问题吗 This is a reference que