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(''12345'')
onclick="assign('<?php echo addslashes($name);?>')
// output: onclick="assign(''12345\'')
onclick="assign('<?php echo htmlspecialchars(addslashes($name));?>')
// output: onclick="assign(''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()
您还可以考虑使用<代码>数据-<代码>属性来存储数据,然后绑定事件处理程序与
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安全的,所以您不需要这样做。