Javascript 没有非法字符。没有单引号。没有双引号。但仍然需要逃跑
我想所有这些都会起作用。 但只有4个有效。其他的则产生“缺失”错误 我运行过的所有“代码检查器”都声称“根本没有错误”。所有字符串文字都不包含任何单引号或双引号 逃避所有文本以避免所有错误的秘密方法是什么Javascript 没有非法字符。没有单引号。没有双引号。但仍然需要逃跑,javascript,html,Javascript,Html,我想所有这些都会起作用。 但只有4个有效。其他的则产生“缺失”错误 我运行过的所有“代码检查器”都声称“根本没有错误”。所有字符串文字都不包含任何单引号或双引号 逃避所有文本以避免所有错误的秘密方法是什么 1起作用 2失败 3失败 4个作品 5件作品 6失败 7失败 8个作品“,',&34;和&39;都不是JavaScript的一部分。如果HTML解析器在HTML中遇到它们,它将转换它们;因此您的代码可以有效地读取: alert("Bob's" ); alert(
1起作用
2失败
3失败
4个作品
5件作品
6失败
7失败
8个作品
“
,'
,&34;
和&39;
都不是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属性中,则将与属性的引号匹配的引号转换为实体。(如果您过火了,只需转换两种引号,这不会有什么坏处。)所以,假设你想提醒“嗨”,Bob的叔叔说。要把它变成一个字符串,你需要反斜杠转义其中至少一个引号(或使用模板文字)。因此你得到“\”嗨“,Bob的叔叔说“
”作为一个有效的JS字符串。然后如果你要把它放在onclick=”里面“
,将双引号(或所有引号)转换为实体(您可以这样做,以获得最终结果:
onclick=""\"Hi\", said Bob's uncle""
这是一个相当容易实现自动化的过程,并将为您提供正确的JavaScript,前提是您首先使用正确的JavaScript。“
,'
,&&34;
和&&39;
都不是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属性中,则将与属性的引号匹配的引号转换为实体。(如果您过火了,只需转换两种引号,这不会有什么坏处。)因此,假设您想提醒“嗨”,Bob的叔叔说。要将其转换为字符串,您需要至少对其中一个引号进行反斜杠转义(或使用模板文本)。因此,您得到“\”嗨“,Bob的叔叔说”
“作为有效的JS字符串。然后,如果要将其放入onclick=“”
,将双引号(或所有引号)添加到实体中(您可以这样做,以获得最终结果:
onclick=""\"Hi\", said Bob's uncle""
这是一个非常容易自动化的过程,如果您首先使用正确的JavaScript,它将为您提供正确的JavaScript。HTML实体在将字符串传递给JavaScript之前被转换为相应的字符。它们仅在HTML级别转义字符,而不是JavaScript威尔
第二个尝试执行Javascript:
alert('Fred's');
alert('Fred\'s');
包含不正确嵌套的引号。您需要包含Javascript转义序列以保护引号:
<div onclick="alert('Fred\'s' );">
这是有效的
如果您正在寻找一种生成代码的通用方法,而不必对代码进行详细分析,那么我认为没有这种方法。最好的解决方案不是首先将Javascript放入HTML属性中,而是使用不引人注目的Javascript
<div id="fredalert">
<script>
document.querySelector("#fredalert").addEventListener("click", function() {
alert('Fred\'s');
});
</script>
document.querySelector(“#fredalert”).addEventListener(“单击”,函数(){
警惕(“弗雷德的”);
});
在将字符串传递给Javascript之前,HTML实体将被转换为相应的字符。它们仅在HTML级别转义字符,而不是在Javascript级别转义字符
第二个尝试执行Javascript:
alert('Fred's');
alert('Fred\'s');
包含不正确嵌套的引号。您需要包含Javascript转义序列以保护引号:
<div onclick="alert('Fred\'s' );">
这是有效的
如果您正在寻找一种生成代码的通用方法,而不必对代码进行详细分析,那么我认为没有这种方法。最好的解决方案不是首先将Javascript放入HTML属性中,而是使用不引人注目的Javascript
<div id="fredalert">
<script>
document.querySelector("#fredalert").addEventListener("click", function() {
alert('Fred\'s');
});
</script>
document.querySelector(“#fredalert”).addEventListener(“单击”,函数(){
警惕(“弗雷德的”);
});
不要使用onclick
属性-使用element.onclick
或更好的element.addEventListener
(其中element是div元素)正确的方法是使用Javascript附加处理程序。内联处理程序基本上是eval
,并且更混乱,更难管理,如您所见。因此,基本上没有任何方法可以正确转义可以(或不可以)的文本包含单引号或双引号?您必须使用1000行单独的addEventListener行重写所有内容?呃。我很害怕。一个自然的问题会弹出,为什么您有1000个不起作用的代码实例?如果第一行代码不起作用,为什么要继续下一个999