【问题标题】:Escape \u200b (Zero width space) and other illegal JavaScript characters转义 \u200b(零宽度空间)和其他非法 JavaScript 字符
【发布时间】:2013-01-13 02:20:39
【问题描述】:

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

<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 中转义零宽度空格字符和其他字符?

【问题讨论】:

    标签: javascript escaping


    【解决方案1】:

    如果字符只出现在字符串中,或​​者转义为\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

    您可能也对我不久前写的这个 Q/A 感兴趣:No visible cause for "Unexpected token ILLEGAL"

    【讨论】:

    • 感谢您的热心回答!我发现在我为name 设置的字符串中也有一个换行符,然后是 Escape \u200b 导致错误。所以我实际上必须转义换行符,而不是你在答案中解释的转义字符。
    • 有道理,很高兴你能弄明白!
    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 2014-08-04
    • 2012-07-03
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多