我从前端获取了一个带有换行符的字符串。它保存在一个数组中,看起来像这样:
[address] => Array (
[0] => Foo
Bar
)
在将数组写入SQL数据库之前,我会使用json_encode()对其进行编码:
$string = json_encode( $string, JSON_UNESCAPED_UNICODE );
这将数组转换为:
{"address":["Foo\r\nBar"]}
很遗憾,如果不转义,数据库不支持 \r 或 \n,所以会去掉这些字符。
- 因此,第一个问题是,是否有函数可以正确转义字符串,使其可以正常写入数据库而不丢失换行符?
- 我没有找到相关的函数,所以我尝试使用 str_replace 函数将 \r\n 替换为 \\n。函数如下:
$string = str_replace(["\r\n","\r","\n"], "\\n", $string);
但是这并没有起作用。我不知道为什么。这个函数本身是可以工作的,因为我曾经试图将 "n" 替换为 "bla",它也起作用了。但是当我试图替换反斜杠时,它就无法找到任何要替换的内容。我不知道是否使用了某些“特殊”的反斜杠字符或者其他可能会出现的情况。
这真的让我抓狂。所以我希望有人能帮助我解决问题。提前谢谢。
str_replace
来转义内容,那么您做错了。请使用适当的数据库转义函数。这取决于您使用的接口。最起码要使用像$db->escape(...)
这样的东西。使用准备好的语句和占位符值会更好。这些是有效的。而您的代码则不是。 - tadman