<a onclick="run('Hi, Tim! I&#039;ve got two', '">test</a>
onclick
事件根本没有运行。这种问题的解决方案是什么?
<a onclick="run(<?php echo htmlentities($str) ?>)">test</a>
如何解决此问题:
以上是通过这样的事情发生?
<a onclick="run('Hi, Tim! I&#039;ve got two', '">test</a>
onclick
事件根本没有运行。这种问题的解决方案是什么?
<a onclick="run(<?php echo htmlentities($str) ?>)">test</a>
如何解决此问题:
以上是通过这样的事情发生?
你没有引用它
放入echo语句'
<a onclick="run('<?php echo htmlentities($str) ?>')">test</a>
顺便提一下输出字符串的内容,'
= '
$str
,作为前实体 - 编码为:
'Hi, Tim! I've got two', '
这显然不是一个有效的JavaScript字符串文字。撇号是HTML编码的,它应该还没有,还有一些尾随的废话。
您应该使用json_encode
函数创建JavaScript字符串(以及其他)文字。如果你有$ rawstr为:
Hi, Tim! I've got two
然后json_encode
会给你正确的JavaScript字符串:
'Hi, Tim! I\'ve got two'
这样你就可以将其插入HTML事件处理程序属性:
<a onclick="run(<?php echo htmlspecialchars(json_encode($rawstr)) ?>); return false;">test</a>
注意htmlspecialchars()
,这比htmlentities()
更可取,因为后者通常会不经意地HTML转义所有非ASCII字符,如果你不愿意,指定正确的字符集。
从PHP 5.3,你可以使用JSON_HEX_
标志,以确保HTML的特殊字符是从未在输出json_encode
,这样可以节省编码步骤:
<a onclick="run(<?php echo json_encode($rawstr, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT) ?>); return false;">test</a>
为了使您的生活更轻松,封装这些常见的方法进入更简单地命名的功能逃逸输出与 - :
function h($s) {
echo htmlspecialchars($s, ENT_QUOTES);
}
function j($s) {
echo json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT|JSON_HEX_APOS);
}
function u($s) {
echo urlencode($s);
}
<a onclick="run(<?php j($rawstr); ?>); return false;">test</a>
更妙的是,避免使用内联事件处理程序的属性在所有由脚本绑定:
<a id="test">test</a>
...
<script type="text/javascript">
document.getElementById('test').onclick= function() {
run(<?php j($rawstr); ?>);
return false;
};
</script>
此外,在wamp示例中缺少右括号。 – DisgruntledGoat 2010-05-28 10:47:36
这可能只是生成代码中的拼写错误 – 2010-05-28 10:50:32