我从前台得到一个字符串,其中有一个换行符。它被保存在一个数组中,看起来像这样。
[address] => Array (
[0] => Foo
然后我在把数组写入SQL数据库之前,在数组上使用json_encode()。
$string = json_encode( $string, JSON_UNESCAPED_UNICODE );
这就把数组变成了。
{"address":["Foo\r\nBar"]}
不幸的是,数据库不喜欢没有转义的 \r 或 \n,所以它摆脱了 \r 和 \n。
因此,第一个问题是,是否有一个函数可以用来正确地转义字符串,以便它可以正确地写入DB而不丢失换行符?
我没有找到任何相关的函数,所以我试着用str_replace来直接用\n替换\r\n。这个函数是
$string = str_replace(["\r\n","\r","\n"], "\\n", $string);
然而这并不奏效。我不知道为什么。这个函数本身是有效的,因为我试着用 "bla "替换 "n",它也有效。然而,当我试图替换反斜杠的时候,它却找不到任何东西可以替换。我不知道这里是否使用了一些 "特殊 "的反斜杠字符,或者是其他什么原因。
这让我发疯了,真的。所以我希望有人能帮助我。请提前感谢。
你的
不起作用,因为你使用的是 双引号 。
str_replace
解决方案。 你应该用 单引号 替换你的 双引号 ,然后神奇的事情就会发生 :D
$string = str_replace(['\r\n','\r','\n'], '\\n', $string);
额外有用的信息:对于更多的细节,你应该看一下,因为了解双引号和单引号的区别是很有用的。
在PHP中单引号和双引号字符串的区别是什么?