php mysqli::真实的_escape_string是否会产生\r\n问题?

hjzp0vay  于 2023-01-12  发布在  PHP
关注(0)|答案(3)|浏览(95)

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

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

如何在DB中存储HTML并检索它而不出现此\r\n问题?

wko9yo5t

wko9yo5t1#

最初的答案并没有完全过时。
现代最好的解决方案是使用PDO。

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

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

ao218c7q2#

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

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

确保使用双引号,以便PHP知道查找CRLF而不是文本\r\n

8dtrkrch

8dtrkrch3#

文件中提到
mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,该函数在以下字符前添加反斜杠:\x00、\n、\r、\、'“和\x1a。
所以最好把这些字符串
以及
带斜线()
返回去掉反斜杠的字符串。(' becomes '等等。)双反斜杠(\)变成单反斜杠()。

相关问题