我使用的是php5.3.6和mysql 5.1.56以及CodeIgniter。这就是我所做的。
在textarea中输入一些文字,如下所示:
这是什么?
我是鲍勃。
$ string = $ _POST ['name'];
$ insertdata = mysql_real_escape_string($ string);
将$ insertdata插入数据库。 它显示“这是什么?\ n \ n \ n我是bob。”(不带双引号)。
查询存储在数据库中的数据,在其上使用stripslashes然后将其放回textarea。 它在textarea中显示“这是什么?nnnI'm bob。”(没有双引号)。
我的问题是:
mysql_real_escape_string()调用 MySQL的库函数 mysql_real_escape_string,其中 在下面添加反斜杠 字符:\ x00,\ n,\ r,\,',“和 \ X1A。
使用mysql_real_escape_string()之后我应该如何保留textarea输入格式?
无论如何选择哪条斜线去掉哪条斜线?
注意:
谢谢, 米洛
答案 0 :(得分:1)
在将数据插入数据库之前必须转义数据,以确保不会产生损坏的查询并避免SQL注入。 但是,当您通过SELECT检索该数据时,您将收到未转义的数据,可以使用。
答案 1 :(得分:1)
这确实感觉很像magic_quotes_gpc = On
。你在php.ini或运行时禁用它吗?它必须是前者,否则它将继续存在。
http://www.php.net/manual/en/security.magicquotes.disabling.php
The magic_quotes_gpc directive may only be disabled at the system level, and not at runtime. In otherwords, use of ini_set() is not an option.
答案 2 :(得分:0)
MySQL转义字符串,但在向您显示结果时,它会给出与未转义相同的结果。
答案 3 :(得分:0)
简答:
// double quotes are *very* important, or chars are not interpreted
$text_from_db=str_replace("\\r","\r",str_replace("\\n","\n",$text_from_db));
答案很长
非常简单但很棘手。 你编写你的textarea并点击“返回”键,有一个\ r \ n(在Windows系统上)带有斜线,它们可以转义“r”和“n”字母,它们提升了回车和换行符的特殊含义。 你实际上看不到它们,因为它们是“不可打印”的字符。 斜线字符本身(0x1B)是不可见的,即单个斜杠是一个“不可打印”的字符,为了使其可见,您必须在可打印的斜杠字符(0x5C)中“转换”它并实现您必须加倍它“\\”。 现在回到问题:如果你能读到斜杠,可能是因为斜杠不是0x1B而是0x5C,所以“n”和“r”失去了它们的特殊含义,你将它们视为纯粹的字符串。 我发布的代码执行此转换,将“[0x5C] n”字符串转换为“[0x1B]”字符。
希望这会有所帮助,它对我有用。 重要提示:如果已正确存储,则来自数据库的文本存在此问题是不正常的。我的建议是三重检查插入和检索,因为(从问题给出)你可以在某处应用引用两次。
答案 4 :(得分:0)
最佳解决方案..
$insertdata = mysql_real_escape_string($string);
(如果需要,可以将其插入数据库中)
echo stripslashes(str_replace('\r\n',PHP_EOL,$insertdata));
(输出完全与您的输入相同)