所以我使用mysql_real_escape_string在输入数据库之前清理一些用户输入,我想知道如何“反转”这个功能,这样当我输出到屏幕时所有转义字符如/ n / r转换为实际的新行...谢谢!
另外,/ n和/ r之间有什么区别?
答案 0 :(得分:1)
stripslashes($variableHere)
将删除$variableHere
中的任何斜杠,只有在字符串中有斜杠时才应使用它。 mysql_real_escape_string()
保留初始字符串,因此无论您传递的是什么,都将输入到数据库中。有关详细信息,请参阅下面附带的php.net手册。
就你的\ n和\ r \ n字符的例子而言,它们将由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
编辑以显然清理它很难理解。
答案 1 :(得分:1)
mysql_real_escape_string()
不会向存储的数据添加斜杠。它会转义字符,以便它们可以安全地通过mysql引擎传递。数据按原样存储,没有斜杠。
因此,当从数据库输出任何与它们一起转义的数据时,您不需要使用stripslashes()
。
如果你看到额外的斜杠,那是因为你要么将它们添加到某个地方,而是打开了addslashes()
或magic_quotes_gpc()
。
正如已经指出的那样\ r \ n没有被转义它们是换行符。仅对包含转义斜杠的数据使用stripslashes()
,否则您可能会删除必要的斜杠。
编辑添加:
你想要从mysql_real_escape_string()
删除斜杠的唯一一次是你在存储数据之前这样做了,比如说你出于某种原因从表单中获取数据的那一刻就会出现数据,然后在错误信息中回复它/预先填写的表格字段。