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

时间:2018-03-05 21:21:22

标签: php json pdo newline

给定从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? 我不能只将换行符替换为空格 - 我需要保留它们(如\n)。 我无法将所有换行符替换为\n,因为这会影响字符串之外的json括号后的换行符。

1 个答案:

答案 0 :(得分:0)

使用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,"\n",json_encode($array));
echo $new_json;
//output: {"field1":"this one is ok, \"double quotes\" are escaped automatically","field2":"But line breaks are not\nand so they ruin json"}

demo