我有一个表单,用户使用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问题的情况下检索它?
答案 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()函数
返回一个带有反斜杠的字符串。 (\'变成'等等。)双反斜杠(\)被制成一个反斜杠()。