我认为在javascript中转义引号字符是通过使用其他引用方式
来完成的"xxx ' yyy"
或
'xxx " yyy'
或使用反斜杠引用它们
'xxx \' yyy\'
或
"xxx \" yyy"
但这似乎不适用于我目前正在处理的问题。
我想在生成的HTML中添加的代码是:
<input type="text" value="MyValue" name="MyName"
onChange="MyFunction(this, 0, 99999, ['XXX', this.value, 'YYY']);">
问题是字符串YYY需要转义什么?
我认为转义单引号(')会很好,但是我还需要转义双引号(“),因为这是onChange代码的外包装。
让我们说我想要YYY的字符串是:
SQ' DQ" LT< GT> AMP&
所以我尝试输出
<input type="text" value="MyValue" name="MyName"
onChange="MyFunction(this, 0, 99999,
['XXX', this.value, 'SQ\' DQ\" LT< GT> AMP&']);">
但是FireFox看到了“&lt;”打破代码
最后,为了让FireFox保持高兴,我不得不使用
SQ\' DQ\x22 LT\x3C GT\x3E AMP\x26
即。
<input type="text" value="MyValue" name="MyName"
onChange="MyFunction(this, 0, 99999,
['XXX', this.value, 'SQ\' DQ\x22 LT\x3C GT\x3E AMP\x26']);">
这比我预期的要多得多。是真的有必要,还是我错过了一些更直接的东西?
感谢。
答案 0 :(得分:3)
你在错误的层面上逃脱 - 在它解析javascript之前,它需要解析它嵌入的HTML。
使用HTML实体"
,<
和>
,你会没事的。
<input type="text" onChange="MyFunction(... ['" < > "']);">
答案 1 :(得分:1)
问题是你需要两次转义代码。首先,您需要转义字符以将它们放入Javascript字符串文字中,然后您必须对整个Javascript代码进行HTML编码,以将其放入HTML标记中的onclick属性中。
首先,要在Javascript中对字符串进行编码,它看起来像这样:
MyFunction(this, 0, 99999, ['XXX', this.value, 'SQ\' DQ" LT< GT> AMP&']);
然后您对整个脚本进行HTML编码。在这种情况下,只有字符需要在字符串中进行编码:
<input type="text" value="MyValue" name="MyName"
onChange="MyFunction(this, 0, 99999,
['XXX', this.value, 'SQ\' DQ" LT< GT> AMP&']);">
答案 2 :(得分:0)
为什么不分解它: innerHTML =''+“AMP&amp;']);” +'“&gt;';
这让我觉得你的设计有问题,你可能想重新考虑你在做什么。
例如,您应该使用DOM函数执行此操作,然后这个问题变得更简单,而不是尝试在innerHTML中执行所有这些操作。
答案 3 :(得分:0)
在xml / html属性符号中&lt;和&gt;应该被转义:&amp; lt;和&amp; gt;