javascript -\u200b(零宽度空格)字符在我的 JS 代码中。哪儿来的呢?

标签 javascript html google-chrome netbeans unicode

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

假设我有代码

var element = '<input size="3" id="foo" name="elements[foo][0]" />';
$('#bar').append(element);

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

<input id="&quot;3&quot;" name="&quot;elements[foo][0]&quot;" 
    size="&quot;foo&quot;" />

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

'<input size=\u200b"3" id=\u200b"foo" name=\u200b"elements[foo]\u200b[0]" />\u200b'

现在我到底从哪里弄来的?

我不确定我从哪里复制了 element 的代码,但它肯定是以下之一:

  • 带有 HTML 模板文件的 Netbeans 编辑器的其他面板;
  • Google Chrome 检查器,“复制为 HTML”操作;
  • Google Chrome 源代码查看页面(非常怀疑)。

但我无法用这两种方法重现错误。

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

谁搞砸了我的代码有什么建议吗?

最佳答案

这是暗中刺杀。

我的赌注是 Google Chrome Inspector。 Searching通过 Chromium 源代码,我发现了 the following block of code

    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 inspector screenshot

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

肯定值得submitting a bug report您应该能够重现该行为。

关于javascript -\u200b(零宽度空格)字符在我的 JS 代码中。哪儿来的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055600/

相关文章:

javascript - jQuery DataTables - 行点击不在第一页以外的页面上注册

javascript - 脚本未在 Chrome 上运行

html - 如何删除在 Chrome 中选择的输入的浅色?

javascript - 如何关闭通过单击 JavaScript 中的图像打开的新选项卡?

html - css - 如何在 td 中居中 Font Awesome 图标?

sockets - Chrome 上的 WebRTC;我如何知道它使用的是 UDP 还是 TCP

javascript - 如何在 30 分钟左右停止自动保存?

javascript - 使用 jQuery 更改目标属性

javascript - 与顺风动态内联更改类属性

javascript - 使用 jQuery 链接滚动到页面部分的有效方法