MySQL数据库包含引号编码和未编码,它正在打破javascript

问题描述:

示例数据库值是'12345'它被分配给一个PHP变量$nameMySQL数据库包含引号编码和未编码,它正在打破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('&#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

+0

@RolandStarke - 好。固定。 – Quentin

+0

这会导致'onclick ='assign('"#039; 12345'"');“>'由于双引号而中断。 – xylar

+0

不应该是:'onclick =“''''assign('+ json_encode($ name)+' )''为js部分,然后'htmlspecialchars(...)'为html部分。 –