这个INSANE空间字符是什么? (谷歌浏览器)

时间:2014-11-16 21:36:29

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

这绝对是在推动我,!&&%& $疯狂...它无视我能想到的一切。

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

在这些引号之间...打开谷歌浏览器并检查。你会看到  ......正常吗?现在右键单击并实际查看此堆栈溢出页面的来源。它是一个常规的空间...(同样,我复制的角色是一个真实的空间)。

我能理解它是否是某种富文本编辑器或其他东西,但在原始html源代码中是一个常规空间,那么是什么给出了?

这里只需点击空格键(工作正常)...... " "

你甚至可以将它复制并粘贴到任何地方并造成严重破坏,并在任何地方放置 。即使在剪贴板中复制的内容只是一个空格。

我有这些愚蠢的角色​​随机出现在我的网站上,我不知道它们来自哪里,或者为什么google将SPACE转换为nbsp;

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

我尝试的每一种方法都将它显示为一个NORMAL空间...那么是什么给出了?

如果我使用ruby并且" ".ord我得到32。如果我用破碎的空间做,我也得到32

请帮助我失去理智。

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

不使用Chrome的人的图片(这是通过chrome dev工具查看此帖子):enter image description here

这里是您查看来源时看到的相同文字的HTML ...无法找到。

enter image description here

7 个答案:

答案 0 :(得分:28)

当我在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。查看此页面的原始十六进制数据确认:

screenshot showing non-breaking space

screenshot showing normal space

答案 1 :(得分:5)

事实证明,两个看似相同的空白字符不是同一个字符。

看哪:

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 AKA &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")," ");

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

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

基本上做的工具是:

  1. 获取网址内容
  2. 在HTML内容中查找chr(194).chr(160)的出现次数
  3. 用更明显的东西替换并突出显示的事件
  4. 通过这种方式,您实际上可以知道空格的位置并正确编辑页面以将其删除。

    该工具的在线版本可在此处找到:

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

    可以看到一个工作示例,该问题的网址包含一个错误:

    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

    希望有人发现它有用,因为任何反馈都会在工具的页面上显示评论部分。

    2017年1月5日更新

    在我们公司的博客上,我们刚刚写了一篇关于这个恼人的白色空间的有趣帖子。你被邀请去看看吧! :-)

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

答案 4 :(得分:2)

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

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

Good-ol'-HTML 不喜欢空格。如果您输入一串单词,它们之间有 5 个空格(使用像 MS 记事本这样的非智能编辑器,那么 html 会以单个空格显示它。

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

下一点是真实空间 (32) 用作换行符,所以很好。 除了我们这些老家伙,他们讨厌看到我们的名字在换行符上分开。这让我们很恼火。

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

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

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

答案 5 :(得分:1)

正如之前的答案所提到的,这是一个不间断的空间(nbsp)。在Mac上,当您意外按下Alt + Space时会插入此字符(大多数情况下,在输入需要Alt的特殊字符的代码时会发生这种情况,例如德语键盘布局上的 <?php echo is_page_template("page.php") ? "Page being used" : "Page not being used"; ?> )。

要将此组合键重新映射为普通的'SPACE字符,您可以按Apple SE

上的建议更改默认键绑定

答案 6 :(得分:0)

对于空格,按&#34; Alt + 0160&#34;这也是一个角色。