我有一个处理添加产品的管理页面。我使用mysql_real_escape_string
来保护我的数据库免受不必要的字符的影响。但是当我从数据库中获取这些数据时(例如产品名称带有单引号,如Dave's Box),我在onclick
属性的页面上显示时会出错。
我使用此代码显示产品代码。
echo "<li onClick='fill(\"$productName\")'><strong>".stripslashes($row['name'])."</strong> by ".stripslashes($row['brand'])."</li>";
答案 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(),具体取决于您允许的有效产品名称的类型。