转义 u200b(零宽度空格)和其他非法的 JavaScript 字符
Escape u200b (Zero width space) and other illegal JavaScript characters
我有一组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
您可能还对我不久前写的问答感兴趣:没有"意外令牌非法"的明显原因
相关文章:
- 如何添加浮动和非浮动,其他
- 与其他库的jQuery.noConflict()
- 播放当前视频时如何停止其他视频?JavaScript
- 剑道UI内联编辑:如何在点击其他按钮时隐藏按钮
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- 除修剪外的其他功能
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- Array.length似乎不起作用;console.log则显示其他情况
- 如何消除代码中的未定义和其他问题
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- Jquery未定义函数正在停止其他操作
- 如何将我的javascript库公开给其他客户端使用
- Javascript阻止其他Javascript代码
- chart.series[id].remove()无法刷新高位图表/高位股票中其他系列的图例属性
- 如何“;过滤器”;或者以其他方式重构该数据
- java脚本在Chrome和其他浏览器中对LocaleTimeString的不同行为
- 意外令牌非法(这不是反逗号问题,而是其他问题)
- 转义 u200b(零宽度空格)和其他非法的 JavaScript 字符