我有一组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["aaau200b"] = "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
您可能还对我不久前写的问答感兴趣:没有"意外令牌非法"的明显原因