转义javascript字符串中的字符

时间:2009-10-06 19:12:58

标签: javascript escaping

我认为在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']);">

这比我预期的要多得多。是真的有必要,还是我错过了一些更直接的东西?

感谢。

4 个答案:

答案 0 :(得分:3)

你在错误的层面上逃脱 - 在它解析javascript之前,它需要解析它嵌入的HTML。

使用HTML实体&quot;&lt;&gt;,你会没事的。

<input type="text" onChange="MyFunction(... ['&quot; &lt; &gt; &quot;']);">

答案 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&quot; LT&lt; GT&gt; AMP&amp;']);">

答案 2 :(得分:0)

为什么不分解它: innerHTML =''+“AMP&amp;']);” +'“&gt;';

这让我觉得你的设计有问题,你可能想重新考虑你在做什么。

例如,您应该使用DOM函数执行此操作,然后这个问题变得更简单,而不是尝试在innerHTML中执行所有这些操作。

答案 3 :(得分:0)

在xml / html属性符号中&lt;和&gt;应该被转义:&amp; lt;和&amp; gt;