MySQL数据库包含引号编码和未编码,它正在打破javascript
问题描述:
示例数据库值是'12345'
它被分配给一个PHP变量$name
。MySQL数据库包含引号编码和未编码,它正在打破javascript
onclick="assign('<?php echo $name;?>')
什么是解决这个问题的最好办法:
该值在例如javacript onclick事件中使用?
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
。
@RolandStarke - 好。固定。 – Quentin
这会导致'onclick ='assign('"#039; 12345'"');“>'由于双引号而中断。 – xylar
不应该是:'onclick =“''''assign('+ json_encode($ name)+' )''为js部分,然后'htmlspecialchars(...)'为html部分。 –