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

Escape u200b (Zero width space) and other illegal JavaScript characters

本文关键字:其他 非法 字符 JavaScript 空格 u200b 转义      更新时间:2023-09-26

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

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

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

逃离这些角色的最佳方法是什么?我应该在后端转义它们(我正在使用带有 Twig 的 Symfony 2 来渲染初始模板),还是应该使用 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

您可能还对我不久前写的问答感兴趣:没有"意外令牌非法"的明显原因