【问题标题】:Apostrophes in Dynamic Data from MySQLMySQL 动态数据中的撇号
【发布时间】:2012-12-06 05:49:36
【问题描述】:

我有一个简单的需要,即允许用户在各个字段中输入撇号,这些字段将通过 PHP 保存到 MySQL 表中。当用户查看此信息时,我希望它在没有 / 的情况下被回显。处理此问题的最佳方法是什么。以下是我的想法:

  • 在回显内容时设置斜杠
  • 来回将撇号转换为“'”

我还在发布的数据上运行 mysql_real_escape_string 和 htmlspecialchars。有没有标准化的处理方式?谢谢!

【问题讨论】:

  • 这很可能是由于您的 magic_quotes 设置,只需禁用它即可。至于转义,m_r_e_s() 很好,但更好的方法是使用准备好的语句(查看 mysqli 或 PDO)
  • Damien 是对的。PDO 和 mysqli 最适合这个

标签: php mysql mysql-real-escape-string htmlspecialchars


【解决方案1】:

您可以使用addslashes() 输入撇号,正如您已经说过的,使用stripslashes() 来回显。 仅当您想为更多使用 mysql_real_escape_string 的转义函数添加撇号时才使用 addslashes()

【讨论】:

  • mysql_real_escape_string() 已经处理了引号,允许安全插入。为什么要使用 addlashes?
  • 嗯,达米安,我总是更喜欢mysql_real_escape_string 而不是addslashes,但在这种情况下,他只是想逃避撇号,所以我提到了addlslahes,还有mysql_real_escape_string 不一定要添加斜线转义,最近版本的 MySQL 转义引号通过将它们中的两个放在一起而不是在它前面放一个斜线。
  • 重点是,由于它们在 sql 时间的工作,转义函数,并且不影响内容。所以 mysql_real_escape 或者你提到的双引号只发生在插入过程中,但在数据库内部,内容是正常的。相反,添加斜杠是“物理地”添加斜杠,然后您需要从文本中删除 - 这就是您的解决方案有点错误的原因。
  • @DamienPirsy,谢谢达米安。听起来在将数据放入数据库时​​可以使用 m_r_e_s() ,并且在回显时可以使用stripslashes。谢谢!
猜你喜欢
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
相关资源
最近更新 更多