【问题标题】:Will mysql_real_escape_string() cancel out stripslashes()?mysql_real_escape_string() 会取消 stripslashes() 吗?
【发布时间】:2011-05-26 20:03:43
【问题描述】:

我让用户输入一些将存储在 sql 中的信息。当然我想转义所有引号之类的......但我也不希望这些东西输出到最终的html中。

我正在为所有 $_POST 变量运行此函数。有效吗?

 function cleanArray($array)  //prevent funky insertions
{
foreach ($array as &$value)
{
    $value = mysql_real_escape_string(stripslashes(nl2br($value)));
}
return $array;  
}

我担心转义字符串和斜线会相互抵消?

【问题讨论】:

  • stripslashes 将从用户输入中删除斜杠,然后 mysql_real_escape_string 会将它们添加回来:) 顺便说一句,mysql_real_eascape 只能用于链接标识符或已打开的数据库连接,否则会返回错误。
  • 如果您使用准备好的语句,您可以完全避免转义:stackoverflow.com/questions/4357340/…
  • 我正在尝试完成一些非常简单的事情。转义引号..然后在我输出我的内容之前对它们进行转义。
  • @ionfish 你在什么时候转义引用?
  • 如果您使用准备好的语句,则无需转义或取消转义任何内容。请参阅http://mattbango.com/notebook/web-development/prepared-statements-in-php-and-mysqli/ 以获得良好的介绍。

标签: php mysql arrays mysql-real-escape-string stripslashes


【解决方案1】:

要在将字符串数据插入数据库之前对其进行转义,请使用mysql_real_escape_string

要稍后在 HTML 页面中输出相同的数据,如果您希望 HTML 源代码显示为文字字符,请使用 htmlspecialchars(),如果您想静默删除任何 HTML,请使用 strip_tags()

不需要其他任何东西,除非您激活了magic quotes,在这种情况下,您确实需要stripslashes(),然后再执行mysql_real_escape_string()。但是,魔术引号是deprecated and it would be much better to turn them off

【讨论】:

  • htmlspecialchars 会把 \' 变成 ' 吗?
  • @ionfish 没有,但如果设置了the ENT_QUOTES parameter,它会将' 变成'
  • 我只是想从引号中删除所有斜线,同时仍然保护我的数据库。我将如何做到这一点。
  • @ionfish 我不明白这些斜线是从哪里来的?
  • 我正在向 mysql 中插入数据,所以假设有人输入“hello”,它将被存储为 /“hello/”。我不希望将其输出到我的网页上。所以从mysql中检索到它之后,我想把它输出回“hello”
猜你喜欢
  • 2012-11-11
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2011-08-27
  • 2012-01-16
  • 1970-01-01
  • 2012-01-23
相关资源
最近更新 更多