使用mysql_real_escape_string后如何正确格式化文本?

时间:2010-08-16 22:25:39

标签: php

所以我使用mysql_real_escape_string在输入数据库之前清理一些用户输入,我想知道如何“反转”这个功能,这样当我输出到屏幕时所有转义字符如/ n / r转换为实际的新行...谢谢!

另外,/ n和/ r之间有什么区别?

2 个答案:

答案 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()删除斜杠的唯一一次是你在存储数据之前这样做了,比如说你出于某种原因从表单中获取数据的那一刻就会出现数据,然后在错误信息中回复它/预先填写的表格字段。