MySQL 数据库包含编码和未编码的引号,它正在中断 javascript
MySQL database contains quotes encoded and unencoded and it's breaking javascript
示例数据库值为 '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
绑定。
示例数据库值为 '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
绑定。