Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转义\u200b(零宽度空间)和其他非法JavaScript字符_Javascript_Escaping - Fatal编程技术网

转义\u200b(零宽度空间)和其他非法JavaScript字符

转义\u200b(零宽度空间)和其他非法JavaScript字符,javascript,escaping,Javascript,Escaping,我将一组JavaScript对象引导到后端模板,以在页面加载时初始化Backbone.js集合。它看起来像这样(作为细枝模板): (功能(){ var jobCollection=new App.Collections.Item( {items%%中的项的%s} { 名称:“{item.name}}”, ... }, {%endfor%} ); })(); 我遇到的问题是,一些文本字段包含\u200b(零宽度空间),这会破坏JavaScript 逃离这些角色的最佳方式是什么?我应该在后端转义

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


(功能(){
var jobCollection=new App.Collections.Item(
{items%%中的项的%s}
{
名称:“{item.name}}”,
...
},
{%endfor%}
);
})();
我遇到的问题是,一些文本字段包含\u200b(零宽度空间),这会破坏JavaScript


逃离这些角色的最佳方式是什么?我应该在后端转义它们(我使用Symfony 2和Twig来呈现初始模板),还是应该在客户端使用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"]);


您可能还对我不久前写的这个Q/A感兴趣:

谢谢gerate的回答!我发现我为
name
设置的字符串中也有一个换行符,紧接着是Escape\u200b导致了错误。所以我实际上必须为换行符而逃跑,而不是你在答案中解释的逃跑字符。有道理,很高兴你能找到它!
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"]);