我想所有这些都会起作用。 但是只有4个工作。其他会产生“ missing)”错误。
我经历过的所有“代码检查器”都声称“完全没有错误”。字符串文字完全不包含任何单引号或双引号。
转义 ALL 文本以避免 ALL 错误的秘密方法是什么。
<div onclick='alert("Bob's" );'> 1 works </div>
<div onclick="alert('Fred's' );"> 2 fails </div>
<div onclick='alert("Say " hi "");'> 3 fails </div>
<div onclick="alert('Say " hi "');"> 4 works </div>
<div onclick='alert("Bob's" );'> 5 works </div>
<div onclick="alert('Bob's' );"> 6 fails </div>
<div onclick='alert("Say " hi "" );'> 7 fails </div>
<div onclick="alert('Say " hi "' );"> 8 works </div>
答案 0 :(得分:2)
在将字符串传递给Javascript之前,将HTML实体转换为它们相应的字符。它们仅在HTML级别而不是Javascript级别对字符进行转义。
第二个尝试执行Javascript:
alert('Fred's');
其中的引号嵌套不正确。您需要包括Javascript转义序列以保护引号:
<div onclick="alert('Fred\'s' );">
这将执行Javascript:
alert('Fred\'s');
这是有效的。
如果您正在寻找一种通用的方式来生成将始终正确转义的代码,而不必进行详细的分析,那么我认为没有一种方法。最好的解决方案不是首先将Javascript放入HTML属性中,而是让我们使用不引人注目的Javascript。
<div id="fredalert">
<script>
document.querySelector("#fredalert").addEventListener("click", function() {
alert('Fred\'s');
});
</script>
答案 1 :(得分:1)
"
,'
,"
和'
不是JavaScript的一部分。如果HTML解析器在HTML中遇到它们,它将对其进行转换。因此您的代码可以有效读取:
alert("Bob's" );
alert('Fred's' );
alert("Say " hi "" );
alert('Say " hi "' );
alert("Bob's" );
alert('Bob's' );
alert("Say " hi "" );
alert('Say " hi "' );
由于可预见的原因而起作用或失败。
正如评论开始所说的那样,最好不要混合使用JavaScript和HTML;使用外部脚本,然后将内容动态附加到DOM(例如,使用document.addEventListener
)。如果您绝对需要在HTML属性中包含JavaScript(尽管我从未遇到过这种需求,也无法想象为什么会这样),则可以像通常那样使用反斜杠转义引号:
alert('Bob\'s');
编辑:如果您已经有需要修复的代码,则最简单的方法是确保 JavaScript 是正确的;否则,请执行以下操作。那么如果将此类JavaScript放在HTML属性中,则将与该属性的引号匹配的引号转换为实体。 (不过,如果您过度选择并只转换两种引号,这不会有任何伤害。)因此,假设您要提醒"Hi", said Bob's uncle
。为了使其成为字符串,您需要反斜杠转义至少其中一个引号(或使用模板文字)。因此,您将获得"\"Hi\", said Bob's uncle"
作为有效的JS字符串。然后,如果要将其放在onclick=""
内,则将双引号(或所有引号)放入实体(您可以这样做,以得到最终结果:
onclick=""\"Hi\", said Bob's uncle""
这是一个相当容易实现自动化的过程,假设您首先使用正确的JavaScript,那么它将为您提供正确的JavaScript。