javascript - escape() 似乎不能始终如一地工作?

标签 javascript string browser escaping

使用 javascript,我生成 HTML 代码,例如添加一个通过单击链接启动的函数,例如:

$('#myDiv').append('<a href="javascript:start(\''+TERM+'\');">click</a>');

因此,如果有人点击链接(点击),则应该调用 start()TERM 可以包含单个单词,例如 worldmoody's,生成的 HTML 代码如下所示:

<a href="javascript:start('world');">click</a>

或者

<a href="javascript:start('moody's');">click</a>

如您所见,第二个示例将不起作用。所以我决定“逃避”TERM,如下所示:

$('#myDiv').append('<a href="javascript:start(\''+escape(TERM)+'\');">click</a>');

使用 firebug 查看 HTML 源代码,可以看到生成了以下代码:

<a href="javascript:start('moody%27s');">click</a>

效果很好,直到我真正单击该链接 - 因此浏览器(此处为 Firefox)接缝解释 %27 并尝试触发 start('moody's');

有没有办法在 JS 中处理术语之前转义持久性术语而不解释 %27 ?除了使用正则表达式将 ' 更改为 \' 之外,还有其他解决方案吗?

最佳答案

不要尝试生成内联 JavaScript。这样会带来太多的痛苦和维护 hell 。 (如果您要沿着这条路线走下去,那么您将使用 \ 转义 JavaScript 字符串中的字符)。

改用标准事件绑定(bind)例程。

假设 $ 是 jQuery,而不是使用该无用变量名称的许多其他库之一:

$('#myDiv').append(
    $('<a>').append("click").attr('href', 'A sensible fallback').click(function (e) {
        alert(TERM); // Because I don't have the function you were calling
        e.preventDefault();
   })
);

另请参阅http://jsfiddle.net/TudEw/

关于javascript - escape() 似乎不能始终如一地工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7688579/

相关文章:

Python:如果字符串中有子字符串,则返回字符串

python - 为什么 Python 3.5 中的 str.translate 比 Python 3.4 快得多?

javascript - 像exe一样在Windows窗口中运行HTML页面

c# - 在不重启的情况下删除 webBrowser 中的 cookie

javascript - Facebook API - Web 应用程序的访问 token

javascript - 动态地向表中添加多行

javascript - 组合框不显示所选值

javascript - 如何使用纯 javascript 在任何网站中动态包含 jQuery

时间:2019-03-08 标签:c++sizeof(string)

amazon-web-services - CloudFront + S3 网站的请求 header 包含 'Accept-Encoding' 时缺少 CORS header