转义 \u200b(零宽度空格)和其他非法 JavaScript 字符

2024-05-16

我有一组 JavaScript 对象,我引导到后端模板,以在页面加载时初始化我的 Backbone.js 集合。它看起来像这样(作为 Twig 模板):

<script type="text/javascript">
(function() {
    var jobCollection = new App.Collections.Item(
        {% for item in items %}
        {
            name: '{{ item.name }}',
            ...
        },
        {% endfor %}
    );
})();
</script>

我遇到的问题是某些文本字段包含 \u200b(零宽度空格),这会破坏 JavaScript。

逃离这些角色的最佳方法是什么?我应该在后端转义它们(我使用 Symfony 2 和 Twig 来渲染初始模板)还是应该在客户端使用 JavaScript 转义它们?如何在 JavaScript 或 PHP 中转义零宽度空格字符和其他字符?


如果该字符仅出现在字符串内部,则转义为\u200b或者按照字面意思,你应该没问题。它们只是作为标识符是非法的。即使作为标识符,如果您使用下标表示法 (obj["aaa\u200b"] = "foo");至少在 Chrome 中是这样,但我不确定它的安全性/兼容性如何。

看几个似乎有效的例子:

var escaped = "aaa \u200b bbb";
var unescaped = "bbb ​ ccc";

console.log(escaped.charCodeAt(4));
console.log(unescaped.charCodeAt(4));

var obj = {};
obj[escaped] = "foo";
obj[unescaped] = "bar";
console.log(obj[escaped]);
console.log(obj[unescaped]);
console.log(obj["aaa \u200b bbb"]);
console.log(obj["bbb ​ ccc"]);

http://codepen.io/anon/pen/JqjEK http://codepen.io/anon/pen/JqjEK

您可能还对我不久前写的这个问答感兴趣:没有明显原因导致“意外令牌非法” https://stackoverflow.com/questions/12719859/syntaxerror-unexpected-token-illegal/12719860#12719860

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转义 \u200b(零宽度空格)和其他非法 JavaScript 字符 的相关文章