Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli::real\u escape\u字符串会产生\r\n问题吗?_Php_Mysql - Fatal编程技术网

Php mysqli::real\u escape\u字符串会产生\r\n问题吗?

Php mysqli::real\u escape\u字符串会产生\r\n问题吗?,php,mysql,Php,Mysql,我有一个表单,用户使用TinyMCE填写一些信息,然后发布该表单,并将其存储在数据库中。 问题似乎在于mysqli::real_escape_字符串正在将回车换行符转换为自身的转义版本,并存储它们。好这是设计的一部分。但当我重新读取数据库,并在从数据库读取数据时对数据运行stripslashes时,我得到如下输出: Here si some good HTML code rn But you can see rn that there are annoying rn "rn" on

我有一个表单,用户使用TinyMCE填写一些信息,然后发布该表单,并将其存储在数据库中。 问题似乎在于mysqli::real_escape_字符串正在将回车换行符转换为自身的转义版本,并存储它们。好这是设计的一部分。但当我重新读取数据库,并在从数据库读取数据时对数据运行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并检索它而不出现此问题?

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

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

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

mysql\u real\u escape\u string调用mysql的库函数mysql\u real\u escape\u string,它将反斜杠前置到以下字符:\x00、\n、\r、\、'和\x1a

所以最好替换这些字符串

斜杠


返回去掉反斜杠的字符串。\'变成了'等等。双反斜杠\被做成一个反斜杠。

原始答案并非绝对过时

现代最好的解决方案是使用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 ] );

mysqli::real_escape_字符串不应该做这样的事情;条纹斜线永远不应该是必要的。你能展示你的代码吗?在保存到数据库之前,你有没有尝试过使用任何编码方法?为什么你要运行stripslashes?@IgnacioVazquez Abrams也许魔法引号是可以启用的-就像每个聪明人所做的那样,最好解决真正的问题,而不是后果不,这根本不是正确的答案。您永远不应该依赖addslashes来转义任何进入数据库的内容。曾经你应该使用事先准备好的语句。