我的 html
中有一个 textarea
供用户输入一些文本。我可以使用 php
将其保存到具有 text
属性的 mysql
表字段中。在插入 mysql
之前,我将 mysql_real_escape_string($data);
(出于安全原因)。但是当我从数据库中取回它时,我会得到
{"bittext":"i
love
mcD"}
这样我会得到错误:
Error: JSON Parse error: Unterminated string parse@[native code]
我不确定如何重新格式化它以便将其解析为 JSON
。
更新:
我发现我没有添加json_encode($data)
函数。现在我可以转了
{"bittext":"i
love
mcD"}
进入
{"bittext":"i\nlove\nmcD"}
但是我在使用 $data = str_replace(array('\r\n', '\r', '\n'), '\\n', $data);
.由于某种原因 \\n
不工作。还有其他方法吗?
更新 2: 在大量修改代码之后,我终于让它工作了:
$je = json_encode($rs,JSON_PRETTY_PRINT);
$nl = array('\r\n', '\r', '\n');
$je = str_replace($nl,'\\n', $je);
我最初的问题是,当我使用 firephpcore
log
时,我只能看到 \n
,即使在 str_replace($nl ,'\\n', $je)
.但随着我进行更多测试,发现它实际上已经可以工作,尽管它在控制台中显示不佳。
最佳答案
来自 mysql_real_escape_string()
的文档;
mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.
您的插入语句将包含字符串 '{"bittext":"i\\nlove\\nmcD"}' - 注意我们在这里转义了转义字符,这就是 mysql_real_escape_string()
这会将字符串 '{"bittext":"i\nlove\nmcD"}' 插入到您的表中 - 如果您从 mysql 客户端进行选择,这就是您应该看到的内容。
在某处,无论是预插入还是后选择,您的代码正在处理该值并将“\n”更改为实际的换行符字节,而不是将其保留为字符串“\n”。
您可以通过运行来修补它;
$data = str_replace(array("\r\n", "\r", "\n"), "\\n", $data);
但是,我建议您通过代码进行回溯,以查看转义字符串在管道中的哪个位置被转换为实际值。
关于php - Angularjs - 文本区域中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33469404/