mysqli :: real_escape_string会产生\ r \ n问题吗?

时间:2014-01-09 04:09:40

标签: php mysql

我有一个表单,用户使用TinyMCE填写一些信息,然后将该表单POST,并存储在数据库中。 问题似乎是mysqli::real_escape_string正在将回车换行符转换为自己的转义版本并存储它们。嗯......这是设计的一部分。但是当我重新读取数据库,并在从数据库中读取数据时对数据运行stripslashes(),我得到如下输出:

 Here si some good HTML code
 rn
 But you can see
 rn
 that there are annoying
 rn
 "rn" on blank lines between everything.

如何在数据库中存储HTML,并在没有这个\ r \ n问题的情况下检索它?

3 个答案:

答案 0 :(得分:0)

最简单的解决方案是首先从数据中删除CRLF

$str = str_replace("\r\n", "", $str);

请务必使用双引号,以便PHP知道查找CRLF而不是文字\r\n

答案 1 :(得分:0)

原始答案并非绝对过时。

现代的最佳解决方案是使用PDO。

$pdo    = new PDO($dsn);
$sql    = "INSERT INTO posts (`foo`) VALUES (?);
$stmt   = $pdo->prepare($sql);
$values = filter_var($_POST['text_area'], FILTER_SANITIZE_STRING);

$stmt->execute( [ $values ] );

答案 2 :(得分:-2)

在文档中提到

mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,该函数将反斜杠添加到以下字符:\ x00,\ n,\ r,\,',“和\ x1a。

所以最好更换这些字符串

stripslashes()函数

返回一个带有反斜杠的字符串。 (\'变成'等等。)双反斜杠(\)被制成一个反斜杠()。