[英]What's the solution for this kind of problem?
<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('<?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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.