这个疯狂的空间字符是啥??? (谷歌浏览器)
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 SPACE
。 U+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 只是<scare quotes>
nice</scare quotes>
并将其重新格式化为 "。我感到压抑。【参考方案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,&#32;
经典空间。 copiedSpace.charCodeAt(0)
返回 160,而 &#160
又名 &nbsp;
字符。
两者的区别在于,一大堆&#160;
一个接一个地重复会站稳脚跟并在它们之间创造额外的空间,而一大堆重复的&#32;
字符会挤在一起形成一个空间。
例如:
A &#160;&#160;&#160;&#160;&#160; B
结果:A B
A &#32;&#32;&#32;&#32;&#32; B
结果:A B
要将&#160;
字符转换为字符串中的&#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】:这是一个不间断的空间。 &nbsp;
是用于表示不间断空格的实体。它本质上是一个标准空间,主要区别在于浏览器不应在 &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”,它也是一个字符。
【讨论】:
以上是关于这个疯狂的空间字符是啥??? (谷歌浏览器)的主要内容,如果未能解决你的问题,请参考以下文章
谷歌浏览器中CSS选择器显示灰色是啥意思,但是它里面的样式又是有作用的