10
09/2014
看不见的字符 feff
观察下面的 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 实体为 ​
该字符也被称为 BOM(Byte Order Mask)
iso-8859-1(英文编码) 或者 windows 1252(windows平台) 的时候会显示为 
如何删除
grep 或者 sed 都可以正则批处理。sublime 土办法如下:
- Open the file
- File > Re-open with encoding > ISO-8859-1 (Latin1)
- You should be able to see and remove the first character in file
- File > Save
- File > Re-open with encoding > UTF8
- File > Save