在PHP中转义单引号

时间:2011-04-13 14:57:32

标签: php escaping html-entities

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

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

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

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

包含其他答案:

  • 使用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>";

答案 3 :(得分:0)

您需要使用addslashes()和htmlentities(),具体取决于您允许的有效产品名称的类型。

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

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