You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何解析无反斜杠的Unicode符号(如u0024转$)

解决PHP中Unicode转义序列缺失反斜杠无法解析的问题

这个问题的核心很明确:原本JSON里的标准Unicode转义序列是\u0024,但经过stripslashes()处理后,前面的反斜杠被移除,变成了u0024,而json_decode()只认带反斜杠的标准格式,自然没法把它解析成$字符。要让所有这类Unicode符号都能被正确识别,我们需要先把缺失的反斜杠补回去,再进行解码。

具体解决方案

我们可以用正则表达式匹配所有u开头的四位十六进制字符序列,给它们补上前面的反斜杠,转换成json_decode()能识别的标准格式:

// 模拟经过stripslashes()处理后的字符串
$processedStr = '{"description":"Hello World, I have u00249999999 dollars","website":"https://www.w3schools.com/php/default.asp"}';

// 补全Unicode转义序列的反斜杠
$fixedJson = preg_replace('/u([0-9a-fA-F]{4})/', '\u$1', $processedStr);

// 解码处理后的JSON
$decodedData = json_decode($fixedJson, true);

// 输出结果
print_r($decodedData);

运行这段代码后,description字段就会正确显示为:Hello World, I have $9999999 dollars,同时网址的正斜杠也不会受到影响,完全符合你的需求。

为什么这个方法有效?

  • 正则表达式/u([0-9a-fA-F]{4})/会精准匹配所有u后面跟着四位十六进制字符的序列(覆盖所有Unicode基本平面的字符)。
  • 替换为\u$1后,就把非标准的uXXXX转换成了JSON规范要求的\uXXXX转义格式,json_decode()就能正常解析成对应的Unicode字符了。
  • 这个规则适用于所有Unicode符号,比如u00E6会被转换成\u00E6,最终解析成æ;u4F60会变成\u4F60,解析成中文的你。

注意事项

如果你的JSON字符串里存在正常的文本内容(比如某个字段值是u1234,并非Unicode转义序列),这个正则替换会误修改它。这种极端场景下,你可能需要结合JSON的结构做更精准的匹配,但绝大多数业务场景中,这个通用方案已经足够可靠。

内容的提问来源于stack exchange,提问作者Nathan Dsouza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:39:10