示例数据库值为 '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\'')
最后一个版本可以工作,但我认为必须有更好的方法。
最佳答案
您应该尽可能使用语言感知的转义例程。 addslashes
几乎从来都不是正确的选择。
在这种情况下,json_encode
将完成这项工作,因为 JSON 是描述文字的 JavaScript 位的子集。请注意,它还会添加引号以表明它是一个字符串。
一旦您确保 JavaScript 安全,您现有的 htmlspecialchars
选项就是使该 JavaScript 安全地嵌入 HTML 属性值的正确选择。
onclick="assign(<?php echo htmlspecialchars(json_encode($name));?>)
您还可以考虑使用 data-
属性来存储数据,然后将事件处理程序与 addEventListener
绑定(bind)。
关于javascript - MySQL 数据库包含编码和未编码的引号,它破坏了 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46728198/