示例数据库值为'12345'
,它分配给PHP变量$name
。
此值用于javacript onclick事件,例如:
onclick="assign('<?php echo $name;?>')
处理此问题的最佳方法是什么?
onclick="assign('<?php echo $name;?>')
// output: onclick="assign(''12345'')
onclick="assign('<?php echo htmlspecialchars($name);?>')
// output: onclick="assign(''12345'')
onclick="assign('<?php echo addslashes($name);?>')
// output: onclick="assign(''12345\'')
onclick="assign('<?php echo htmlspecialchars(addslashes($name));?>')
// output: onclick="assign(''12345\'')
最后一个版本有效,但我认为必须有更好的方法。
答案 0 :(得分:2)
您应该尽可能使用语言感知的转义例程。 addslashes
几乎不是正确的选择。
在这种情况下,json_encode
将完成工作,因为JSON是描述文字的JavaScript位的子集。请注意,它还会添加引号以指示它是一个字符串。
一旦您确保JavaScript安全,您现有的htmlspecialchars
选项就是使JavaScript安全嵌入HTML属性值的正确选择。
onclick="assign(<?php echo htmlspecialchars(json_encode($name));?>)
您还可以考虑使用data-
属性存储数据,然后将事件处理程序与addEventListener
绑定。