我有一组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中转义零宽度空格字符和其他字符?
答案 0 :(得分: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 / A感兴趣:No visible cause for "Unexpected token ILLEGAL"