php 7.4 中 unicode 转义字符串(如 "u4f60u597d")需正确解码为 utf-8:若为 json 格式,json_decode 自动处理;若为纯字符串,推荐用 json_decode('["' . addslashes($str) . '"]')[0] 或正则+iconv 解码。

PHP 7.4 调用 DeepSeek(或其他大模型 API)返回的中文若以 Unicode 转义形式出现(如 "u4f60u597d"),本质是 JSON 字符串中的 Unicode 表示,不是乱码,而是未被正确解码的原始文本。关键不是“修复乱码”,而是**让 PHP 正确解析这串 Unicode 转义序列成 UTF-8 字符**。
确认返回内容的真实格式
先打印原始响应,看清楚结构:
- 如果 API 返回的是标准 JSON(如
{"text": "u4f60u597d"}),直接json_decode($response, true)即可——PHP 会自动把uXXXX转为 UTF-8 中文; - 如果返回的是纯字符串(如
"u4f60u597d",没包在 JSON 里),才需要手动解码; - 用
var_dump($raw)检查是否含多余引号、转义反斜杠(如"\u4f60"),这会影响后续处理。
纯 Unicode 字符串(非 JSON)的可靠解码方法
当拿到的是裸的 "u4f60u597d" 这类字符串时,推荐以下两种方式,避开不可靠的 mb_detect_encoding:
-
用
json_decode包一层(最简稳):将字符串套进合法 JSON 数组再解码:$utf8 = json_decode('["' . addslashes($str) . '"]')[0] ?? $str;
注意:addslashes防止内部引号破坏 JSON 结构; -
正则 + iconv(更底层可控):
$utf8 = preg_replace_callback('/\\u([0-9a-fA-F]{4})/', function($m) { return iconv('UCS-2BE', 'UTF-8', pack('H4', $m[1])); }, $str);
它逐个匹配uXXXX,用大端 UCS-2 解码后转 UTF-8,兼容性好。
避免常见陷阱
DeepSeek 返回内容本身是 UTF-8,但若你在处理过程中混入其他编码操作,反而会引入问题:
- 不要对已解码的中文再调用
mb_convert_encoding(..., 'UTF-8', ...),可能二次转码出错; - 确保 PHP 文件自身保存为 UTF-8 无 BOM 格式(尤其 Windows 编辑器易带 BOM);
- 输出到浏览器前,加
header('Content-Type: text/html; charset=utf-8');,并 HTML 中写<meta charset="utf-8">。
验证是否成功
解码后用这几个方式快速判断:
-
echo $utf8;看浏览器是否正常显示中文; -
var_dump(bin2hex($utf8));—— 中文 UTF-8 字节应是 3 字节一组(如"e4bda0"对应 “你”); -
echo mb_strlen($utf8, 'UTF-8');——长度应等于字符数,不是字节数。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











