【问题标题】:Escaping single quote in PHP在 PHP 中转义单引号
【发布时间】:2011-04-13 14:57:32
【问题描述】:

我有一个处理添加产品的管理页面。我使用mysql_real_escape_string 保护我的数据库免受不必要的字符的影响。但是当我从数据库中获取这些数据时(例如,带有单引号的产品名称,如 Dave's Box),在我的页面上的 onclick 属性中显示它时出现错误。

我使用此代码显示产品代码。

echo "<li onClick='fill(\"$productName\")'><strong>".stripslashes($row['name'])."</strong> by ".stripslashes($row['brand'])."</li>";

【问题讨论】:

  • 您遇到了什么错误以及是什么 HTML 代码导致的?。你能发布 HTML 代码,而不是 PHP 代码吗?
  • 还有,去掉stripslashes(),这里用错了

标签: php escaping html-entities


【解决方案1】:

您应该保护您的代码免受引号、dbl-quotes 和 HTML 标记的影响。为此,请使用 PHP 的 htmlspecialchars()ENT_QUOTES 集。示例:

 htmlspecialchars($row['name'], ENT_QUOTES);

【讨论】:

    【解决方案2】:

    在 javascript 函数调用中使用 json_encode 作为产品名称,在正常的 HTML 输出中使用 htmlspecialchars

    【讨论】:

      【解决方案3】:

      要包含其他答案:

      • 使用json_encode$productName 值正确编码为JavaScript 字符串并
      • 使用 htmlspecialchars 和引号样式 ENT_QUOTES 对其进行正确编码,以便在单引号 HTML 属性值中使用。

      所以:

      echo "<li onClick='" . htmlspecialchars('fill('.json_encode($productName).')', ENT_QUOTES) . "'><strong>" . htmlspecialchars(stripslashes($row['name'])) . "</strong> by " . htmlspecialchars(stripslashes($row['brand'])) . "</li>";
      

      【讨论】:

        【解决方案4】:

        根据您允许的有效产品名称的类型,您需要使用 addlashes() 和可能的 htmlentities()。

        http://php.net/manual/en/function.addslashes.php

        http://php.net/manual/en/function.htmlentities.php

        【讨论】:

          猜你喜欢
          • 2018-04-26
          • 1970-01-01
          • 1970-01-01
          • 2011-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多