所以我使用mysql_real_escape_string来清理一些用户输入之前,它进入数据库,我想知道我如何去“倒转”这个功能,这样,当我输出到屏幕所有逃脱的字符,如/ n/r获取转换为实际的新行......谢谢!如何在使用mysql_real_escape_string后正确格式化文本?
另外,/ n和/ r之间的区别是什么?
所以我使用mysql_real_escape_string来清理一些用户输入之前,它进入数据库,我想知道我如何去“倒转”这个功能,这样,当我输出到屏幕所有逃脱的字符,如/ n/r获取转换为实际的新行......谢谢!如何在使用mysql_real_escape_string后正确格式化文本?
另外,/ n和/ r之间的区别是什么?
mysql_real_escape_string()
不加斜杠存储数据。它转义字符,以便它们可以通过mysql引擎安全地传递。数据按原样存储,没有斜杠。
因此,从数据库输出任何与其一起转义的数据时,您不需要使用stripslashes()
。
如果你看到额外的斜杠,这是因为你要么在某处添加它们,比如说addslashes()
或magic_quotes_gpc()
已打开。
如前所述\ r \ n不逃脱,他们是换行符。仅对包含转义斜杠的数据使用stripslashes()
,否则您可能会删除重要的斜线。
编辑补充: 你想从mysql_real_escape_string()
剥离斜线的唯一情况是,如果你存储数据之前这样做,说如果你因为某些原因转义的数据从一种形式得到了它的分钟,然后呼应出来在错误消息/预填充表单字段中。
stripslashes($variableHere)
将从$variableHere
中删除任何斜杠,只有在字符串中有斜线时才应使用它。 mysql_real_escape_string()
保留初始字符串,所以无论你传递什么,它都将被输入到数据库中。有关更多信息,请参阅下面的php.net手册。
就你\ n和\ r字符的例子而言,它们将被自然状态保存mysql_real_escape_string()
,但如果你将\ n和\ r直接回显到HTML中,它不会显示换行符,为此必须使用nl2br($string)
。
http://php.net/manual/en/function.stripslashes.php
http://php.net/manual/en/function.nl2br.php
编辑清洗这件事作为显然这是很难理解的。
*唯一一次你想从'mysql_real_escape_string()'去除斜杠是... *不要这样做。 'mysql_real_escape_string()'应该只在查询之前立即使用,因为它专门为活动数据库连接执行。如果您在代码的其他地方需要这种类型的功能,请使用不同的转义/清理程序。 – cbednarski 2010-08-16 23:53:45