【发布时间】:2017-06-28 01:00:55
【问题描述】:
我从前端得到一个字符串,其中有一个换行符。它保存在一个数组中,如下所示:
[address] => Array (
[0] => Foo
Bar
)
然后我在将数组写入 SQL DB 之前对数组使用 json_encode():
$string = json_encode( $string, JSON_UNESCAPED_UNICODE );
这会将数组变成:
{"address":["Foo\r\nBar"]}
不幸的是,如果没有转义,DB 不喜欢 \r 或 \n,因此它摆脱了 \r 和 \n。
- 所以第一个问题是,有没有一个函数可以用来正确地转义字符串,从而可以在不丢失换行符的情况下正确地写入数据库?
- 我没有找到任何功能,所以我尝试使用 str_replace 将 \r\n 替换为 \\n。功能是:
$string = str_replace(["\r\n","\r","\n"], "\\n", $string);
但这不起作用。我不知道为什么。该函数本身有效,因为我尝试仅用“bla”替换“n”并且它有效。但是,当我尝试替换反斜杠时,它找不到任何要替换的东西。我不知道这里是否使用了一些“特殊”反斜杠字符,或者这里可能发生了什么。
这让我发疯了,说真的。所以我希望有人可以帮助我。提前致谢。
【问题讨论】:
-
使用 PDO 就可以了,不用担心这些事情……说真的……不难。
-
如果您使用
str_replace来逃避事情,那么您做错了。使用适当的数据库转义功能。这取决于您使用的接口。它绝对最少使用$db->escape(...)之类的东西。使用带有占位符值的准备好的语句要好得多。这些工作。你的代码没有。 -
如果您使用的是 WordPress,请参阅WPDB documentation 了解更多详情。
-
如何将数据传递到数据库?你能把你的代码和执行代码后存储在数据库中的结果数据贴出来吗??
标签: php mysql sql json wordpress