2010-08-16 64 views
2

所以我使用mysql_real_escape_string来清理一些用户输入之前,它进入数据库,我想知道我如何去“倒转”这个功能,这样,当我输出到屏幕所有逃脱的字符,如/ n/r获取转换为实际的新行......谢谢!如何在使用mysql_real_escape_string后正确格式化文本?

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

回答

1

mysql_real_escape_string()不加斜杠存储数据。它转义字符,以便它们可以通过mysql引擎安全地传递。数据按原样存储,没有斜杠。

因此,从数据库输出任何与其一起转义的数据时,您不需要使用stripslashes()

如果你看到额外的斜杠,这是因为你要么在某处添加它们,比如说addslashes()magic_quotes_gpc()已打开。

如前所述\ r \ n不逃脱,他们是换行符。仅对包含转义斜杠的数据使用stripslashes(),否则您可能会删除重要的斜线。

编辑补充: 你想从mysql_real_escape_string()剥离斜线的唯一情况是,如果你存储数据之前这样做,说如果你因为某些原因转义的数据从一种形式得到了它的分钟,然后呼应出来在错误消息/预填充表单字段中。

+0

*唯一一次你想从'mysql_real_escape_string()'去除斜杠是... *不要这样做。 'mysql_real_escape_string()'应该只在查询之前立即使用,因为它专门为活动数据库连接执行。如果您在代码的其他地方需要这种类型的功能,请使用不同的转义/清理程序。 – cbednarski 2010-08-16 23:53:45

1

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

编辑清洗这件事作为显然这是很难理解的。

+0

他不需要除了'nl2br()'函数以外的其他任何东西,但是我给他提供了反斜杠和手动链接。 – Robert 2010-08-16 23:21:10

+0

我没有告诉他对从数据库中出来的所有东西运行这个命令,停止像我一样行事。我说过,如果他没有看到任何斜杠输出,它将删除任何斜杠,没有理由运行命令。 – Robert 2010-08-16 23:33:38