要让中文和斜杠原样保留,需用 JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES;二者必须按位或连接,且输入数据须为UTF-8编码、不含不可序列化类型。

PHP 中用 json_encode() 生成 JSON 字符串时,默认会把中文转成 uXXXX 形式,斜杠 / 也会被转义为 /。要让中文和斜杠都原样保留,关键在于正确组合两个 JSON 常量。
直接使用两个常量按位或
这是最常用、最清晰的写法:
-
JSON_UNESCAPED_UNICODE:阻止中文被转成 Unicode 编码 -
JSON_UNESCAPED_SLASHES:阻止斜杠/被转义 - 两者需用
|(按位或)连接,不能简单相加或逗号分隔
示例:
```php$data = ['name' => '张三', 'url' => 'https://example.com/api'];
$json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
// 输出:{"name":"张三","url":"https://example.com/api"}
```
用数值代替常量(不推荐但可行)
这两个常量底层是整数:JSON_UNESCAPED_UNICODE = 256,JSON_UNESCAPED_SLASHES = 64,
所以 256 | 64 = 320,也可写成:
$json = json_encode($data, 320);
```
但这种写法可读性差,容易出错,建议只在调试或兼容旧环境时临时使用。
注意编码和数据类型前提
这两个选项生效有前提条件:
- 输入数据必须是 UTF-8 编码,否则中文仍可能乱码或返回
false - 数组中不能含资源(resource)、闭包(Closure)等不可序列化类型,否则整个
json_encode()可能失败 - 如果想同时美化输出,可额外叠加
JSON_PRETTY_PRINT,如:JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT
常见误区提醒
以下做法无效或多余:
- 只加
JSON_UNESCAPED_UNICODE:中文正常了,但/还是变成/ - 用
str_replace替换反斜杠:破坏 JSON 结构,可能误删合法转义(如"、\) - 对已生成的 JSON 字符串再做
stripslashes:JSON 已是字符串,不是 PHP 的 magic quotes 场景,不该这样处理
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











