Php mysqli::real\u escape\u字符串会产生\r\n问题吗?
我有一个表单,用户使用TinyMCE填写一些信息,然后发布该表单,并将其存储在数据库中。 问题似乎在于mysqli::real_escape_字符串正在将回车换行符转换为自身的转义版本,并存储它们。好这是设计的一部分。但当我重新读取数据库,并在从数据库读取数据时对数据运行stripslashes时,我得到如下输出: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
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来转义任何进入数据库的内容。曾经你应该使用事先准备好的语句。