在PHP开发过程中,我们经常会遇到需要将字符串转换为JSON格式的场景,当字符串本身包含双引号、单引号这类特殊字符时,如果处理不当就会导致生成的JSON格式不合法,后续解析时就会报错。那么PHP字符串转JSON时如何处理带引号的内容呢?

核心处理工具:json_encode函数
PHP内置的json_encode函数是处理字符串转JSON的标准工具,它默认会自动处理字符串中的特殊字符,包括引号内容,不需要我们手动拼接转义符。我们先看一个基础示例:
<?php // 包含双引号的原始字符串 $str = '这是一个"带双引号"的字符串'; // 转换为JSON $json = json_encode($str); echo $json; // 输出结果:"这是一个\"带双引号\"的字符串" ?>
可以看到,json_encode会自动把字符串中的双引号转义为\",保证生成的JSON格式合法。如果是单引号,默认情况下不需要额外转义,因为JSON字符串本身是用双引号包裹的。
特殊场景的参数配置
如果遇到一些特殊需求,比如需要保留原始字符串的某些格式,或者处理中文编码问题,可以给json_encode传入第二个参数调整行为:
- JSON_UNESCAPED_SLASHES:不转义斜杠,适合处理包含路径的字符串
- JSON_UNESCAPED_UNICODE:不转义中文,避免中文被转为Unicode编码
- JSON_HEX_QUOT:把双引号转为\u0022格式,部分场景可能需要这种转义方式
我们看一个带中文和双引号的示例:
<?php $str = '测试"中文引号"内容'; // 同时保留中文和不转义斜杠 $json = json_encode($str, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); echo $json; // 输出:"测试\"中文引号\"内容" ?>
反向解析的注意事项
当我们拿到带转义引号的JSON字符串需要转回PHP字符串时,直接使用json_decode即可,函数会自动处理转义字符:
<?php $json = '"这是一个\"带双引号\"的字符串"'; $str = json_decode($json); echo $str; // 输出:这是一个"带双引号"的字符串 ?>
需要注意的是,如果JSON字符串本身格式不合法,比如手动拼接时没有正确转义引号,json_decode会返回null,这时候可以用json_last_error函数查看错误原因。
常见错误避坑
很多开发者会尝试手动拼接JSON字符串,比如直接写 '{"content":"' . $str . '"}' ,如果$str里包含双引号,就会出现格式错误。这种写法完全不推荐,一定要使用json_encode处理,它会自动完成所有转义工作,避免格式问题。
另外如果字符串中包含换行符、制表符这类控制字符,json_encode默认也会自动转义,不需要额外处理,保证生成的JSON可以被所有标准JSON解析器正常识别。
PHPJSON字符串转义json_encodejson_decode修改时间:2026-05-28 17:33:44