2

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

4

1 回答 1

2

如果字符只出现在字符串中,或​​者转义\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/AI 感兴趣:“Unexpected token ILLEGAL”没有明显的原因

于 2013-01-29T14:30:17.270 回答