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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:18:08