逃避'(单引号/撇号)无法正常工作

时间:2015-03-03 11:20:19

标签: javascript escaping

这是我逃脱的代码

E = {
    "\x26": "\x26amp;",
    "\x3c": "\x26lt;",
    "\x3e": "\x26gt;",
    '"': "\x26quot;",
    "'": "\x26#39;",
    "/": "\x26#x2F;"
};

function myescape(a) {
    return a.replace(/[&<>"'\/]/g, function(a) {return E[a] })
};

这里的问题是,当我逃离以下时: '!@#$%^&*()_+=-:"'

它生成以下内容: '!@#$%^&amp;*()-=+_';&quot;'

所以,基本上所有的角色都被逃脱了。但是,单引号会按原样呈现。任何线索如何超越这个?

我还尝试添加以下元标记(dint work)

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

1 个答案:

答案 0 :(得分:1)

  

这里的问题是,当我逃离以下时:'!@#$%^&*()_+=-:"'

     

它生成以下内容:'!@#$%^&amp;*()-=+_';&quot;'

不,它没有;字符串周围的单引号是字符串分隔符,不是字符串内容的一部分。如果他们在字符串的内容中,他们也会被替换:

E = {
    "\x26": "\x26amp;",
    "\x3c": "\x26lt;",
    "\x3e": "\x26gt;",
    '"': "\x26quot;",
    "'": "\x26#39;",
    "/": "\x26#x2F;"
};

function myescape(a) {
    return a.replace(/[&<>"'\/]/g, function(a) {return E[a] })
};

snippet.log(myescape("'!@#$%^&*()_+=-:\"'"));
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>


这是一个社区Wiki,因为它基本上是一个代码注释,尽管它实际上也回答了这个问题。