10 09/2014

看不见的字符 feff

最后更新: Wed Sep 10 2014 12:35:31 GMT+0800

观察下面的 div 应该是红色背景

111
<div id="test-zero-width-space">111</div>
<style>
#test-zero-width-space {
background-color:blue;
background-color:red;
}    
</style>

为什么?

用 vim 打开样式表内容(sublime 等文本编辑器是看不到这个字符的,但删除的时候,会发现这里的确有个东西),会发现

#test-zero-width-space {
background-color:blue;
<feff>background-color:red;
}

这个万恶的 feff,是啥?wikipedia 解释:零宽空格 这是一个零宽空格,用来分隔英文单词而不显示宽度。就是它导致了样式表的失败!

怎么发现的?

今天从 google code 拷贝了 css 代码总是有问题!经过一番折腾,在 shell 下面 对比 下面两段文字

diff 1.txt 2.txt

发现的确不同!但肉眼就是看不到!最后想到了 vi

测试

点击下面文字看文字长度,可以证明该幽灵的存在!:)

background-color:blue;
background-color:blue;

unicode 编码

该字符 unicode 编码 为:\ufeff 或者 U+200B html 实体为 &#8203;

该字符也被称为 BOM(Byte Order Mask)

iso-8859-1(英文编码) 或者 windows 1252(windows平台) 的时候会显示为 

如何删除

grep 或者 sed 都可以正则批处理。sublime 土办法如下:

  1. Open the file
  2. File > Re-open with encoding > ISO-8859-1 (Latin1)
  3. You should be able to see and remove the first character in file
  4. File > Save
  5. File > Re-open with encoding > UTF8
  6. File > Save