【问题标题】:What is this INSANE space character??? (google chrome)这个疯狂的空间字符是什么??? (谷歌浏览器)
【发布时间】:2015-01-13 18:04:15
【问题描述】:

这绝对把我逼疯了!&&%&$ 疯了......它违背了我能想到的一切。

这个角色就在这里..." "

在这些引号之间...打开谷歌浏览器并检查。你会看到它是一个 ... 正常吧?现在右键单击并实际查看此堆栈溢出页面的来源。这是一个普通的空格...(另外,我复制的字符是一个实际的空格)。

如果它是某种富文本编辑器之类的,我可以理解,但在原始 html 源代码中是一个常规空间,那么给出了什么?

这里只是按空格键(效果很好)..." "

您甚至可以将其复制并粘贴到任何地方,然后大肆破坏并让 chrome 将   放在任何地方。即使剪贴板中复制的内容只是一个空格。

我的网站上随处可见这些愚蠢的字符,我不知道它们来自哪里,或者为什么 google 将 SPACE 转换为 nbsp;

我已经尝试检查实际的字符代码,它是我能找到的所有东西的常规空间......

我尝试的每一种方法都将其显示为 NORMAL 空间...那又是什么呢?

如果我使用 ruby​​ 并执行" ".ord,我会得到32。如果我用破碎的空间来做,我也会得到32

请帮助我让我失去理智。

编辑:您可以证明这一点...查看此页面上的源代码,您将看到两个空的" " 正常。现在查看控制台,只有一个是 ,但原始来源是相同的。

不使用 chrome 的人的图片(这是通过 chrome 开发工具查看这篇文章):

这是您在查看源代码时看到的相同文本的 HTML...找不到 nbsp。

【问题讨论】:

  • 当您说“复制和粘贴”时,您是从浏览器窗口还是 F12 开发工具中复制粘贴?它可以从浏览器窗口复制。如果您要复制原始 HTML,浏览器是否将其转换为 nbsp; 是否重要?它呈现相同的效果。
  • 如果我查看 HTML,它不在源代码中。查看此 SO 线程的 HTML,它将显示为常规空间。所以在原始 html 中有两个 SPACES,但在控制台中,其中一个是 nbsp
  • 也许这与您的 IDE 有关?奇怪的 linting 程序可能会导致细微的意外差异。原始来源是什么样的?还是nbsp; 只在inspector 中?
  • 这是 chrome 38.0.2125.122,您从我的原始帖子中看到的图像是 chrome dev tools。我正在使用vim,尽管这无关紧要,因为一旦它在剪贴板中,您就可以将其复制并粘贴到其他地方并触发chrome以放置nbsp(这就是我将其放入我的SO问题正文中的方式)。如果您在此页面的 HTML 上查看源代码,您将看到它不在源代码中,但它显示在 chrome 开发工具中
  • 当我查看这个问题的来源时,我得到了" " no-break space character。我不知道为什么我看到的东西和你不一样。

标签: google-chrome unicode encoding utf-8 character-encoding


【解决方案1】:

当我在 Internet Explorer 中查看此页面的源代码,或直接从服务器下载并在文本编辑器中查看时,有问题的第一个空格字符在实际 HTML 中的格式如下:

THIS character right here... " "

注意  实体。那是 Unicode 代码点 U+00A0 NO-BREAK SPACE。在检查 HTML 时,Chrome 只是很好,并将其重新格式化为  。但请不要误会,这是一个真正的不间断空间,而不是您所期望的 Unicode 代码点 U+0020 SPACEU+00A0 在视觉上显示与U+0020 相同,但它们在语义上是不同的字符。

第二个空格字符在实际 HTML 中的格式如下:

<p>Here's just with hitting the space key (which works fine)... <code>" "</code>.</p>

所以它是 Unicode 代码点 U+0020 而不是 U+00A0。查看此页面的原始十六进制数据确认:

【讨论】:

  • 嗯...非常有趣。我不敢相信我以前从未遇到过这种情况。感谢您的精彩解释。
  • 真的很有趣!我们都应该知道的任何其他“不仅仅是空间的空间”吗?
  • @Andrea 参见维基百科上的Unicode Whitespace
  • "Chrome 只是 &lt;scare quotes&gt;nice&lt;/scare quotes&gt; 并将其重新格式化为  "。我感到压抑。
【解决方案2】:

原来这两个看似相同的空白字符并不是同一个字符。

看:

var characters = ["a", "b", "c", "d", " "];

var typedSpace  = " ";
var copiedSpace = " ";

alert("Typed: " + characters.indexOf(typedSpace));   // -1
alert("Copied: " + characters.indexOf(copiedSpace)); // 4    
alert(typedSpace === copiedSpace);                   // false

JSFiddle

typedSpace.charCodeAt(0) 返回 32,&amp;#32; 经典空间。 copiedSpace.charCodeAt(0) 返回 160,而 &amp;#160 又名 &amp;nbsp; 字符。

两者的区别在于,一大堆&amp;#160;一个接一个地重复会站稳脚跟并在它们之间创造额外的空间,而一大堆重复的&amp;#32;字符会挤在一起形成一个空间。

例如:

A &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; B 结果:A       B

A &amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32; B 结果:A B

要将&amp;#160; 字符转换为字符串中的&amp;#32; 字符,请尝试以下操作:

.replace(new RegExp(String.fromCharCode(160),"g")," ");

对于像我这样必须从高级别一直调试到字符代码的未来人们,我向你们致敬。

【讨论】:

    【解决方案3】:

    不要把你的短裤打结。这是我们老派喜爱的特殊 html 字符之一,因为我们是侵权法。

    对于我们中的许多人来说,我们被告知句子以大写字母开头并以句号结尾。但是下一句用两个空格隔开。

    Good-ol'-HTML 不喜欢空格。如果您输入的字符串之间有 5 个空格(使用 MS 记事本之类的非智能编辑器,则 html 会以单个空格显示它。

    所以,为了让它看起来像我们的老屁一样,我们用 '.&NbSp; 结束一个句子Next' 这会在句号后放置两个空格,看起来像 '。下一个'而不是'。下一个”。

    下一点是实际空间 (32) 用作换行符,这很好。 除了我们这些老屁,他们讨厌看到我们的名字被换行符分开。这让我们很恼火。

    但是,当然,这就是 &NbSp;再次派上用场。如果您输入“John&NbSp;Brown”,那么 html 会认为这是一个单词,并显示它只是我们老歌的仪式。

    这些怎么办?东西到那里?好吧,好的旧 Word(我怀疑许多聪明的编辑器)看到两个空格并将它们输出为不间断空格,然后是普通空格。 在 Word 中,您可以通过键序列 alt-ctrl-space 在 John 和 Brown 之间插入一个不间断空格(对不起,苹果用户)

    课程结束(除了术语 &NbSp; 必须全部小写 - 这个查看器甚至正在转换它)

    【讨论】:

      【解决方案4】:

      这是一个不间断的空间。 &amp;nbsp; 是用于表示不间断空格的实体。它本质上是一个标准空间,主要区别在于浏览器不应在 &amp;nbsp; 占据的位置中断(或换行)一行文本。

      该字符很可能是由您的 HTML 编辑器插入的。你能在上下文中给出一个更具体的例子吗?

      【讨论】:

      • 我知道它的定义是什么。现在看一下这个 SO 线程的 HTML 源代码,它不存在......那么它是如何到达那里的呢?
      • @Tallboy 保存 HTML 文件,用记事本打开它,复制并粘贴该空间到 rishida.net/uniview 。显然它实际上是一个 nbsp,Chrome 的源代码查看器正在用常规空间替换它。
      • 我不信任谷歌浏览器另存为或检查器,所以我使用 CURL,它实际上是一个空格。那么chrome是如何区分的呢? (两者相同)
      • @Tallboy 您如何确定它们相同?因为他们不是。我用wget和gedit再次检查,肯定是nbsp。
      • 我用过curl http://stackoverflow.com/questions/26962323/what-is-this-insane-space-character-google-chrome/26962533?noredirect=1#comment42464140_26962533...嗯
      【解决方案5】:

      这实际上不是问题的答案,而是一种工具,可用于检测网站页面 html 中的这种特殊空白,以便我们继续定位和删除它。

      基本上做的工具是:

      1. 获取 URL 的内容
      2. 在 HTML 内容中查找 chr(194).chr(160) 的出现
      3. 用更明显的东西替换和突出出现的内容

      通过这种方式,您实际上可以知道空格的位置并正确编辑您的页面以将其删除。

      该工具的在线版本可以在这里找到:

      http://tools.heavydots.com/nbsp-space-char-detect/

      这个问题的 url 可以看到一个工作示例,其中包含一次:

      http://tools.heavydots.com/nbsp-space-char-detect/?url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F26962323%2Fwhat-is-this-insane-space-character-google-chrome&highlight=1&hstring=%7BNBSP%7D

      如果有人希望代码在本地运行,可以使用 Github 存储库:
      https://github.com/HeavyDots/nbsp-space-char-detect

      希望有人觉得它有用,对于任何反馈,工具页面上有一个 cmets 部分。

      2017 年 1 月 5 日更新

      在我们公司的博客上,我们刚刚写了一篇关于这个令人讨厌的空白的有趣帖子。诚邀您前来阅读! :-)

      http://heavydots.com/blog/when-the-white-space-became-a-beast

      【讨论】:

        【解决方案6】:

        正如前面的答案所提到的,这是一个不间断的空格 (nbsp)。在 Mac 上,当您不小心按 Alt + Space 时,会插入此字符(大多数情况下,在输入需要 Alt 来表示特殊字符的代码时会发生这种情况,例如德语键盘布局上的 [)。

        要将此组合键重新映射为普通的 ol' SPACE 字符,您可以按照 Apple SE 的建议更改默认键绑定

        【讨论】:

          【解决方案7】:

          对于空格,按“Alt+0160”,它也是一个字符。

          【讨论】:

            猜你喜欢
            • 2019-04-08
            • 1970-01-01
            • 2013-02-04
            • 2012-02-18
            • 2012-04-04
            • 2012-07-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多