PHP处理SQL查询结果JSON编码:如何保留换行符?原生json_encode可用吗?
当然可以用原生
json_encode! 你可能误解了它的默认行为——PHP的json_encode其实默认就会自动转义字符串中的换行符(包括\n、\r\n、\r这些),把它们转换成JSON规范的\n序列,完全符合你要保留换行信息的需求。
为什么你会觉得它没处理换行?
大概率是这两种情况:
- 你不小心使用了
JSON_UNESCAPED_LINE_TERMINATORS参数(PHP 7.1+新增),这个参数会强制让换行符不被转义,直接保留原始字符,这显然不符合你的需求,只要去掉这个参数就行。 - 你的text字段里混了不同类型的换行符(比如Windows的
\r\n、旧Mac的\r),虽然json_encode会分别转义成\r\n和\r,但如果你希望统一成\n的形式,可以先做一步预处理。
具体解决方案
方案1:直接用原生json_encode(推荐)
只要不使用特殊参数,默认行为就完全满足你的需求:
// $data是从SQL获取的数据集数组 $jsonResult = json_encode($data);
比如你的text字段内容是:
第一行 第二行
json_encode后会输出:
{"content":"第一行\n第二行"}
前端解析后能正确还原换行。
方案2:统一换行符后再编码(如果需要统一换行格式)
如果你的数据里有多种换行符,想统一转成\n再编码,可以用正则替换预处理:
// 遍历数据集,处理每个text类型字段 foreach ($data as &$item) { // 假设你的text字段叫content,把所有换行符统一成\n $item['content'] = preg_replace('/\r\n|\r/', "\n", $item['content']); } unset($item); // 解除引用 $jsonResult = json_encode($data);
这样不管原始是哪种换行,最终JSON里都会是\n的形式,更统一。
总结
完全没必要放弃原生json_encode,它的默认行为就已经帮你处理了换行符的转义,只要避开那些会禁用转义的参数就行。如果有多种换行格式的问题,加一步简单的预处理就搞定了。
内容的提问来源于stack exchange,提问作者joox
相关产品推荐
相关产品推荐

