我遇到了一些json_encode问题。
当i json_encode数组有新行时,它不是转义新行,而是删除\并保留n。
ex: $array = array('name'=> "some text \n\r text");
$results = json_encode($array);
它正在数据库中保存some text nr text
。
我使用的是php 5.3.8
。
编辑:
这是我的原始代码我正在使用
$attr = array();
for($i=0; $i < count($_POST['key']); $i++){
$attr[$_POST['key'][$i]] = $_POST['value'][$i];
}
echo json_encode(array('custom' => $attr));
这些POST
值来自表单。
8条答案
按热度按时间v64noz0r1#
Newlines are not valid characters inside of JSON strings。这是预期的行为:
字符
除“或\或控制字符之外的任何Unicode字符
JSON将这些控制字符转义到列表中的控制字符中。
所以现在我们有了
'\n'
(字面意思是反斜杠后面跟'n'),如果没有正确转义,它将在数据库中保存为n
。解决方案
使用预处理语句对数据库中存储的字符串中的所有斜杠进行正确转义,将其保存为
'\n'
,检索数据时可以将其转换为"\n"
。wqnecbli2#
我不认为json_encode是您的问题。我猜您的数据库将\解释为转义字符,所以它只是简单地将它们去掉。
要解决此问题,只需使用addslashes对转义字符进行转义:
nfg76nw03#
您可以手动退出它们:
您可以扩展自己的json_encode函数,并将使用的
json_encode
替换为my_json_encode
:仅供参考,以上返回:
{"name":"some text \n\r text"}
而不是{"name":"some text nr text"}
xzlaal3s4#
我解决了这个问题。它不是在json_encode问题。它是一个错误,而保存到数据库。
问题是在服务器中启用了magic_quotes_gpc。在我的应用程序中,如果启用了magic_quotes,我将剥离斜杠。
我禁用了magic_quotes_gpc。现在工作正常。
谢谢你们
rm5edbpk5#
您可以按照PHP手册中的描述使用
JSON_PRETTY_PRINT
。https://www.php.net/manual/function.json-encode.php
8fq7wneg6#
你可以使用
PHP_EOL
作为新行。在哪里包括新行取决于你想要的方式。在下面的例子中,我需要在最后一个结束方括号和每个花括号后面加一个新行:函数为
nafvub8i7#
我使用此命令清除反斜杠。
s4n0splo8#
我发现最简单的解决方案是使用
JSON_UNESCAPED_UNICODE
(如果需要,还可以使用其他标志)。关于原始问题:
其输出