javascript - MySQL 数据库包含编码和未编码的引号,它破坏了 javascript

标签 javascript php html mysql html-entities

示例数据库值为 '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('&#39;12345'')

onclick="assign('<?php echo addslashes($name);?>')
// output: onclick="assign(''12345\'')

onclick="assign('<?php echo htmlspecialchars(addslashes($name));?>')
// output: onclick="assign('&#39;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/

相关文章:

javascript - Auth 中间件不调用 stub - NodeJS、sinon

c# - 在调用 MVC Controller 方法之前需要先执行 Javascript 方法

php - 如何将 PHP7 的 $mysqli->real_escape_string 与数组一起使用

javascript - 将 HTML 参数传递给 php 页面

php - ZF2 控制台路由无限参数

html - 始终使 div 紧挨着另一个 div

javascript - jQuery 单击外部元素可向上或向下移动包含选中复选框的无序列表项

javascript - 在 get 查询中传递变量

html - 如何通过id在特定元素上应用css

javascript - 如果 ng-repeat 小于 x,AngularJS 添加附加项目