这个疯狂的空间字符是啥??? (谷歌浏览器)

Posted

技术标签:

【中文标题】这个疯狂的空间字符是啥??? (谷歌浏览器)【英文标题】: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。我不知道为什么我看到的东西和你不一样。 【参考方案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://***.com/questions/26962323/what-is-this-insane-space-character-google-chrome/26962533?noredirect=1#comment42464140_26962533...嗯【参考方案5】:

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

基本上做的工具是:

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

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

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

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

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

http://tools.heavydots.com/nbsp-space-char-detect/?url=http%3A%2F%2F***.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”,它也是一个字符。

【讨论】:

以上是关于这个疯狂的空间字符是啥??? (谷歌浏览器)的主要内容,如果未能解决你的问题,请参考以下文章

为什么谷歌浏览器打不开

google浏览器怎么设置刷新时间?

谷歌浏览器中CSS选择器显示灰色是啥意思,但是它里面的样式又是有作用的

谷歌浏览器点新链接时出现:此文件可能会损坏你的计算机。是啥问题?

谷歌浏览器的作用是啥?

谷歌浏览器退回到上一个网页的快捷键是啥?