首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >\u200b (零宽度空间)字符在我的JS代码中。他们从哪里来的?

\u200b (零宽度空间)字符在我的JS代码中。他们从哪里来的?
EN

Stack Overflow用户
提问于 2011-08-14 07:29:10
回答 5查看 72.9K关注 0票数 55

我正在使用NetBeans IDE 7.0.1开发一个web应用程序的前端。最近我有一个非常讨厌的错误,我终于修好了。

说我有密码

代码语言:javascript
运行
复制
var element = '<input size="3" id="foo" name="elements[foo][0]" />';
$('#bar').append(element);

当我看到size属性在Chrome中不起作用时(在其他浏览器中没有检出),我注意到出了问题。当我在检查器中打开该元素时,它被解释为

代码语言:javascript
运行
复制
<input id="&quot;3&quot;" name="&quot;elements[foo][0]&quot;" 
    size="&quot;foo&quot;" />

挺奇怪的。手动重新键入element字符串字符后,bug就消失了.当我撤销这个更改时,我注意到Netbeans提醒我注意我的旧代码中的一些Unicode字符。它是\u200b --在每个'=‘之后,在'][’‘之间和在字符串末尾的一个零宽度空格。所以字符串看起来很正常,因为没有显示零宽度空格,但是在转义之后,我的字符串是

代码语言:javascript
运行
复制
'<input size=\u200b"3" id=\u200b"foo" name=\u200b"elements[foo]\u200b[0]" />\u200b'

我从哪弄来的?

我不知道我从哪里复制了element代码,但它肯定是以下内容之一:

  • 带有HTML模板文件的Netbeans编辑器的其他窗格;
  • 谷歌Chrome检查器,‘复制为HTML’的行动;
  • 谷歌Chrome源代码查看页面(非常怀疑)。

但我不能用这两种方法来复制窃听器。

我在Windows 7下使用Netbeans 7.0.1和GoogleChrome13.0,没有键盘开关或类似的东西在运行。此外,我还使用Git进行版本控制,但我没有提取该代码,因此Git不太可能受到指责。这不可能是我同事的一个愚蠢的笑话,因为他们很有礼貌。

谁把我的代码搞砸了?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-16 11:11:20

这是黑暗中的一针。

我赌的是谷歌Chrome探测仪。搜索通过铬源,我发现了下面的代码块

代码语言:javascript
运行
复制
    if (hasText)
        attrSpanElement.appendChild(document.createTextNode("=\u200B\""));

    if (linkify && (name === "src" || name === "href")) {
        var rewrittenHref = WebInspector.resourceURLForRelatedNode(node, value);
        value = value.replace(/([\/;:\)\]\}])/g, "$1\u200B");
        attrSpanElement.appendChild(linkify(rewrittenHref, value, "webkit-html-attribute-value", node.nodeName().toLowerCase() === "a"));
    } else {
        value = value.replace(/([\/;:\)\]\}])/g, "$1\u200B");
        var attrValueElement = attrSpanElement.createChild("span", "webkit-html-attribute-value");
        attrValueElement.textContent = value;
    }

很有可能我只是在这里乱叫错了树,但看起来像是插入了零宽度的空格(用于处理软文本包装?)在显示属性的过程中。也许“复制为HTML”函数没有正确地删除它们?

更新

在摆弄了Chrome元素检查器之后,我几乎确信这就是你的迷途\u200b的来源。请注意,由于插入的零宽度空间,行不仅可以在可见空间中包装,而且还可以在=/([\/;:\)\]\}])/匹配的字符之后进行包装。

不幸的是,我无法复制您的问题,当它们无意中被包括在您的剪贴板(我使用Chrome 13.0.782.112在Win XP)。

如果您能够复制这种行为,提交错误报告肯定是值得的。

票数 58
EN

Stack Overflow用户

发布于 2019-06-07 22:46:17

当我将源代码从另一个站点复制到编辑器中时,我就遇到了这种情况。如果您使用visual代码或Atom编辑器,这将突出显示那些讨厌的字符,零宽度空间\u200b)等。

票数 9
EN

Stack Overflow用户

发布于 2015-04-17 13:19:12

正如肖恩琴先生已经提到的那样。在复制从网页粘贴jquery代码时,我碰巧复制了这个问题。

当它发生时:从Google版本41.0.2272.118米复制文本(未经其他浏览器测试)到Dreamweaver代码窗口。这个复制代码中不需要的字符,就像这样发生在这里。

您将网页中的文本复制为

代码语言:javascript
运行
复制
$('.btn-pageMenu').css('display'​​​​​​​​​​​​​​​​​​​​​​​​​​​,'block');​​​​​​

在幕后,这就是这条线的原因

代码语言:javascript
运行
复制
<code><span class="pun">&#8203;</span><span class="pln">$</span><span class="pun">(</span><span class="str">'.btn-pageMenu'</span><span class="pun">).</span><span class="pln">css</span><span class="pun">(</span><span class="str">'display'</span><span class="pun">&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;,</span><span class="str">'block'</span><span class="pun">);&#8203;&#8203;&#8203;&#8203;&#8203;&#8203;</span></code>

复制到您刚才提到的高级编辑器或Dreamweaver会在浏览器中产生错误,可能也会导致javascript代码失败。

代码语言:javascript
运行
复制
Uncaught SyntaxError: Unexpected token ILLEGAL

解决方案:当它发生时,拥抱记事本的价值,直到这个问题被大人物解决为止。它更多地与编辑器相关,而不是浏览器。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7055600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档