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

MySQL数据库包含编码和未编码的引号,它';它破坏了javascript,javascript,php,html,mysql,html-entities,Javascript,Php,Html,Mysql,Html Entities,示例数据库值为';12345'分配给PHP变量$name 此值用于JavaScript onclick事件,例如: onclick="assign('<?php echo $name;?>') onclick=“分配(“”) 处理这个问题的最好方法是什么 onclick="assign('<?php echo $name;?>') // output: onclick="assign(''12345'') onclick="assign('<?php e

示例数据库值为
';12345'
分配给PHP变量
$name

此值用于JavaScript onclick事件,例如:

onclick="assign('<?php echo $name;?>')
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\'')
onclick=“分配(“”)
//输出:onclick=“分配(''12345'')
onclick=“分配(“”)
//输出:onclick=“分配(”';12345“”
onclick=“分配(“”)
//输出:onclick=“分配(''12345\'')
onclick=“分配(“”)
//输出:onclick=“分配(';12345\”)

最后一个版本可以工作,但我认为一定有更好的方法。

您应该尽可能使用语言感知转义例程。
addslashes
几乎从来都不是正确的选择

在本例中,
json\u encode
将完成这项工作,因为json是描述文本的JavaScript位的子集。注意,它还将添加引号以指示它是字符串

一旦您使JavaScript安全,您现有的
htmlspecialchars
选择就是使JavaScript安全地嵌入HTML属性值的正确选择

onclick="assign(<?php echo htmlspecialchars(json_encode($name));?>)
onclick=“assign()

您还可以考虑使用<代码>数据-<代码>属性来存储数据,然后绑定事件处理程序与AdvEntRistista .< /P> < P>您应该尽可能使用语言感知的逃逸例程。code>addslashes几乎从来都不是正确的选择

在本例中,
json\u encode
将完成这项工作,因为json是描述文字的JavaScript位的子集。注意,它还将添加引号以指示它是一个字符串

一旦您使JavaScript安全,您现有的
htmlspecialchars
选择就是使JavaScript安全地嵌入HTML属性值的正确选择

onclick="assign(<?php echo htmlspecialchars(json_encode($name));?>)
onclick=“assign()

您还可以考虑使用<代码>数据-<代码>属性来存储数据,然后将事件处理程序绑定到<代码> AdvEntSeristAudi/<代码> < /P> @ RolandStarke -好catch。固定。这导致<代码> OnCalk =“赋值”(039);12345’’;“>由于双引号而中断。不应该是:

onclick=“
'assign('+json_encode($name)+')
用于js部分,然后
htmlspecialchars(…)
用于html部分。@xylar-在您发表评论之前,该问题已得到解决。@t.niese-您可以将所有js放在一个字符串中,然后对其进行html编码,但由于手写部分已经是html安全的,你不需要这么做。@RolandStarke-接得好。修正了。这会导致
onclick=“assign”(“#039;12345”)”>
由于双引号而中断。它不应该是:
onclick=“
为js部分分配('+json_encode($name)+')
,然后是
htmlspecialchars(…)
用于html部分。@xylar-在您发表评论之前,该问题已得到解决。@t.niese-您可以将所有JS放在一个字符串中,然后用html对其进行编码,但由于手写部分已经是html安全的,所以您不需要这样做。