json_encode保留给定文本中的换行符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json_encode保留给定文本中的换行符相关的知识,希望对你有一定的参考价值。

给定从sql查询返回的数据集,其中一些字段的类型为“text”并且可能包含任意空格,我需要json_encode它。

$dataset=$stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($dataset);

这最终可能会像

[
{
 "field1":"this one is ok, "double quotes" are escaped automatically",
 "field2":"But line breaks are not
and so they ruin json"
}
]

我不能在sql端更改文本(既不在表中也不在查询中),我需要在php端替换换行符到 n序列。这是否意味着我不能使用股票json_encode?它逃脱了双引号但没有换行符 - wtf?我不能只将换行符替换为空格 - 我需要保留它们(如 )。我无法将所有换行符替换为 ,因为这将影响字符串之外的json括号之后的换行符。

答案

使用PHP_EOLstr_replace

<?php
$array = [
    'field1' => 'this one is ok, "double quotes" are escaped automatically',
    'field2' => 'But line breaks are not
and so they ruin json'
];

$new_json = str_replace(PHP_EOL,"
",json_encode($array));
echo $new_json;
//output: {"field1":"this one is ok, "double quotes" are escaped automatically","field2":"But line breaks are not
and so they ruin json"}

demo

以上是关于json_encode保留给定文本中的换行符的主要内容,如果未能解决你的问题,请参考以下文章

.txt 文件中的 textarea 内容,但保留换行符

运行 json_encode 后替换 \r\n (换行符)

替换字符串中的 html 标记,但保留文本并用自定义标记重新换行

使用 json_encode() 时如何添加空格和换行符? [复制]

使用pandoc保留标题中的换行符

p标签中的文本换行