W3C
css-validator和UTF-8文档
BOM冲突
授权方式:署名
非商业用途
保持
致
转载时请务必以超链接(http://www.fwolf.com/blog/post/96)
形式标明文章原始出处和作者信息及本声明![](/icons/9355dou2.gif)
css-validator是W3C提供
![](/icons/9355de.gif)
![](/icons/9355yi.gif)
个工具
![](/icons/9355dou.gif)
用于检查CSS
![](/icons/9355de.gif)
有效性
![](/icons/9355dou.gif)
是个不错
![](/icons/9355de.gif)
工具
![](/icons/9355dou.gif)
同样
![](/icons/9355de.gif)
还有W3C Markup Validation Service
![](/icons/9355dou.gif)
用于检查html、xhtml等文档
![](/icons/9355de.gif)
格式有效性
![](/icons/9355dou2.gif)
但是在检查
![](/icons/9355yi.gif)
篇文档
![](/icons/9355de.gif)
时候出现了问题
![](/icons/9355dou.gif)
文档是UTF-8编码
![](/icons/9355dou.gif)
XHTML 1.0 Strict检查已通过
![](/icons/9355dou.gif)
CSS代码采用直接使用“<style type=”text/css”>”写在文档中
![](/icons/9355de.gif)
方式
![](/icons/9355dou2.gif)
在使用css-validator检查
![](/icons/9355de.gif)
时候出现如下
![](/icons/9355cuowu.gif)
:
Target: http://www.fwolf.com/tools/ogame_construction_resource_computer.php
Please, validate your XML document first!
Line 1
Column 1
Content is not allowed in prolog.
第
![](/icons/9355yi.gif)
行、第
![](/icons/9355yi.gif)
列?这不是xml 1.0
![](/icons/9355de.gif)
文档声明么?如何在检查css
![](/icons/9355de.gif)
时候还用这个?结果
![](/icons/9355yi.gif)
查
![](/icons/9355dou.gif)
可能
![](/icons/9355de.gif)
原因有两个:
原因
![](/icons/9355yi.gif)
:css-validator架构于Jigsaw——W3C’s Java Server上
![](/icons/9355dou.gif)
而Java或Jsp处理XML文档
![](/icons/9355de.gif)
时候
![](/icons/9355dou.gif)
无法正确识别UTF-8格式文档
![](/icons/9355de.gif)
BOM
![](/icons/9355dou.gif)
从而导致
![](/icons/9355cuowu.gif)
“Content is not allowed in prolog”
![](/icons/9355dou2.gif)
原因 2:在这里看到别人在讨论
![](/icons/9355de.gif)
![](/icons/9355dou.gif)
即然XML 1.0
![](/icons/9355de.gif)
规范标准中BOM是合理存在
![](/icons/9355de.gif)
![](/icons/9355dou.gif)
那么相关
![](/icons/9355de.gif)
XML工具就应该具备识别BOM标记
![](/icons/9355de.gif)
功能
![](/icons/9355dou.gif)
但css-validator使用
![](/icons/9355de.gif)
XML
Validator是采用ElCel Technology C
![](/icons/9355jiajia.gif)
Toolkit编译
![](/icons/9355de.gif)
![](/icons/9355dou.gif)
而这个东东可能不能完全识别BOM?
在W3C
![](/icons/9355de.gif)
bugzilla中也有人提交了这个bug
![](/icons/9355dou.gif)
但似乎讨论也是无疾而终
![](/icons/9355dou2.gif)
由于Windows平台下
![](/icons/9355de.gif)
![](/icons/9355yi.gif)
些编辑器
![](/icons/9355dou.gif)
尤其是我使用
![](/icons/9355de.gif)
Emeditor
![](/icons/9355dou.gif)
在没有BOM
![](/icons/9355de.gif)
情况下
![](/icons/9355dou.gif)
有时会有些麻烦
![](/icons/9355dou.gif)
所以出于方便维护
![](/icons/9355de.gif)
目
![](/icons/9355de.gif)
来讲
![](/icons/9355dou.gif)
我认为BOM还是保留
![](/icons/9355de.gif)
好
![](/icons/9355dou2.gif)
至于css-validator不能识别
![](/icons/9355de.gif)
问题
![](/icons/9355dou.gif)
就只能期待css-validator进行改进了
![](/icons/9355dou.gif)
目前倒是还可以把css标记粘贴过去进行检查不是?W3C
![](/icons/9355de.gif)
W3C Markup Validation Service在检查文档
![](/icons/9355dou.gif)
发现文档具有BOM
![](/icons/9355de.gif)
时候
![](/icons/9355dou.gif)
会出现
![](/icons/9355yi.gif)
个小提示:
Byte-Order Mark found in UTF-8 File.
The Unicode Byte-Order Mark (BOM) in UTF-8 encoded files is known to cause problems for some text editors and older browsers. You may want to consider avoiding its use until it is better supported.
这介绍说明W3C也在改进各类工具对BOM
![](/icons/9355de.gif)
支持
![](/icons/9355dou2.gif)
至于说了半天
![](/icons/9355dou.gif)
什么是BOM?请看谈谈Unicode编码
![](/icons/9355dou.gif)
简要解释UCS、UTF、BMP、BOM等名词这篇文章
![](/icons/9355dou2.gif)
还有GonDa’s Blog上
![](/icons/9355de.gif)
Unicode、BOM也提到了
![](/icons/9355yi.gif)
些
![](/icons/9355dou2.gif)
另:css-validator以前都是英文版
![](/icons/9355dou.gif)
现在好像改成了自动识别用户语言
![](/icons/9355de.gif)
版本了
![](/icons/9355dou.gif)
但是我使用FireFox访问首页居然是乱码--文档是GB2312编码
![](/icons/9355dou.gif)
却
![](/icons/9355cuowu.gif)
![](/icons/9355de.gif)
被识别成了UTF-8编码
![](/icons/9355dou2.gif)
总体感觉易用性比W3C Markup Validation Service差远了
![](/icons/9355dou.gif)
尤其是css-validator
![](/icons/9355de.gif)
中文版
![](/icons/9355dou.gif)
![](/icons/9355cuowu.gif)
提示有点莫名其妙
![](/icons/9355de.gif)
![](/icons/9355dou.gif)
还不知道如何才能使用英文版界面
Byte-Order Mark found in UTF-8 File 后面是它
![](/icons/9355de.gif)
![](/icons/9355yi.gif)
些问题,这样后就是文档不能通过你所指示
![](/icons/9355de.gif)
dtd文件校验.
他
![](/icons/9355de.gif)
意思是:在以utf-8编码
![](/icons/9355de.gif)
文件出现有BOM标记.
其原因是:
你使用ue打开你这个页面
![](/icons/9355dou.gif)
ctrl+h
![](/icons/9355dou.gif)
你会看到头两个字节是比较奇怪
![](/icons/9355de.gif)
![](/icons/9355dou.gif)
不是正常
![](/icons/9355de.gif)
ascii码
![](/icons/9355dou2.gif)
这是
![](/icons/9355yi.gif)
般
![](/icons/9355de.gif)
utf-8文件
![](/icons/9355de.gif)
文件头
![](/icons/9355dou.gif)
用于标示utf-8格式
![](/icons/9355dou.gif)
但很不幸
![](/icons/9355dou.gif)
很多系统并不认这个标记
![](/icons/9355dou.gif)
所以后来似乎utf-8文件有另外
![](/icons/9355yi.gif)
种格式
![](/icons/9355dou.gif)
就是头两个字节不再是特殊标记了
![](/icons/9355dou2.gif)
解决思路方法:
用比较新版本
![](/icons/9355de.gif)
editplus和ultraedit都可以选择保存为无BOM
![](/icons/9355de.gif)
utf-8格式
![](/icons/9355dou2.gif)
如果用notepad保存
![](/icons/9355dou.gif)
似乎
![](/icons/9355yi.gif)
定有那个标记
![](/icons/9355dou2.gif)
UTF-8 格式編輯程式網頁注意事項 (BOM
![](/icons/9355de.gif)
困擾)
什麼是 BOM (Byte-Order Mark)?
--------------------
在
![](/icons/9355yi.gif)
些平台上
![](/icons/9355dou.gif)
是把代表數值較大
![](/icons/9355byte.gif)
放在前面
![](/icons/9355dou.gif)
這稱為 Big Endian (BE)
![](/icons/9355de.gif)
系統;有些平台則相反
![](/icons/9355dou.gif)
是把代表數值較小
![](/icons/9355byte.gif)
放在前面
![](/icons/9355dou.gif)
稱為 Little Endian (LE)
![](/icons/9355de.gif)
系統
若採 LE 方式編碼
![](/icons/9355dou.gif)
BOM 會表示為 0xFF 0xFE
![](/icons/9355dou.gif)
而在 Unicode
![](/icons/9355de.gif)
定義中是不存在 U+FFFE 這個字元
![](/icons/9355de.gif)
.
若採 BE 方式編碼
![](/icons/9355dou.gif)
BOM 會表示為 0xFE 0xFF
![](/icons/9355dou.gif)
而 U+FEFF 剛好是在 Unicode 中
![](/icons/9355de.gif)
有效字元
![](/icons/9355dou.gif)
代表
![](/icons/9355de.gif)
是
![](/icons/9355yi.gif)
個不佔空間
![](/icons/9355de.gif)
space 符號
![](/icons/9355dou.gif)
所以即使沒被解釋為 BOM
![](/icons/9355dou.gif)
也不會對閱覽者產生錯誤
![](/icons/9355de.gif)
訊息.
--------------------
如何移除? (使用 PHP)
引用 http://www.bo-blog.com/index.php?job=art&articleid=a_20040805_214712
-------------------
BOM信息是文件開頭
![](/icons/9355de.gif)
![](/icons/9355yi.gif)
串隱藏
![](/icons/9355de.gif)
![](/icons/9355zifu.gif)
![](/icons/9355dou.gif)
用於讓某些編輯器識別這是個UTF-8編碼
![](/icons/9355de.gif)
文件
![](/icons/9355dou2.gif)
但PHP在讀取文件時會把這些
![](/icons/9355zifu.gif)
讀出
![](/icons/9355dou.gif)
從而形成了文件開頭含有
![](/icons/9355yi.gif)
些無法識別
![](/icons/9355de.gif)
![](/icons/9355zifu.gif)
![](/icons/9355de.gif)
問題
要檢測
![](/icons/9355yi.gif)
個UTF-8文件是否含有BOM信息
![](/icons/9355dou.gif)
就是檢測文件開頭
![](/icons/9355de.gif)
字 3個符
![](/icons/9355dou.gif)
是否為0xEF, 0xBB, 0xBF
下方有個小程式
![](/icons/9355dou.gif)
使用者可以搜尋某個目錄下所有文件
![](/icons/9355dou.gif)
並檢測是否加了BOM
//此文件用於快速測試UTF8編碼
![](/icons/9355de.gif)
文件是不是加了BOM
![](/icons/9355dou.gif)
並可自動移除
//By Bob Shen
$basedir=\".\"; //修改此行為需要檢測
![](/icons/9355de.gif)
目錄
![](/icons/9355dou.gif)
點表示當前目錄
$auto=1; //是否自動移除發現
![](/icons/9355de.gif)
BOM信息
![](/icons/9355dou2.gif)
1為是
![](/icons/9355dou.gif)
0為否
//以下不用改动
![](/icons/9355if.gif)
($dh = opendir($basedir)) {
while (($file = readdir($dh)) !
![](/icons/9355dd.gif)
false) {
![](/icons/9355if.gif)
($file!=\'.\' && $file!=\'..\' && !is_dir($basedir.\"/\".$file)) echo \"filename: $file \".checkBOM(\"$basedir/$file\").\"
\";
}
closedir($dh);
}
function checkBOM ($filename) {
global $auto;
$contents=file_get_contents($filename);
$char
![](/icons/9355set.gif)
[1]=substr($contents, 0, 1);
$char
![](/icons/9355set.gif)
[2]=substr($contents, 1, 1);
$char
![](/icons/9355set.gif)
[3]=substr($contents, 2, 1);
![](/icons/9355if.gif)
(ord($char
![](/icons/9355set.gif)
[1])
![](/icons/9355dd.gif)
239 && ord($char
![](/icons/9355set.gif)
[2])
![](/icons/9355dd.gif)
187 && ord($char
![](/icons/9355set.gif)
[3])
![](/icons/9355dd.gif)
191) {
![](/icons/9355if.gif)
($auto
![](/icons/9355dd.gif)
1) {
$rest=substr($contents, 3);
rewrite ($filename, $rest);
![](/icons/9355return.gif)
(\"BOM found, automatically removed.\");
}
![](/icons/9355else.gif)
{
![](/icons/9355return.gif)
(\"BOM found.\");
}
}
![](/icons/9355return.gif)
(\"BOM Not Found.\");
}
function rewrite ($filename, $data) {
$filenum=fopen($filename,\"w\");
flock($filenum,LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}
?>
-------------------
2005-11-1 修正
本次測試結果:
1. UltraEdit 10
缺點:商業軟體
優點:完全符合需求
2. EditPlus
缺點:無法移除 BOM 碼
![](/icons/9355dou.gif)
借助其他方式移除的後中文變成亂碼
![](/icons/9355dou2.gif)
商業軟體
優點:可自訂程式語法格式、中文化
2.1 EditPlus 2.20
缺點:商業軟體
優點:完全符合需求
3. PSPad editor
缺點:無法移除 BOM 碼
優點:具有 16 進位編輯模式、中文化.....如果不是要移除 BOM 碼
![](/icons/9355dou.gif)
以後我就會改用了
4. Zend Studio Client
缺點:商業軟體、很慢 (測試機器不夠力)
優點:似乎也可以符合需求
![](/icons/9355dou.gif)
不過因為太慢了
![](/icons/9355dou.gif)
沒有仔細測試過
5. Notepad
缺點:無法移除 BOM 碼
優點:具有摺疊層次功能、可自訂程式語法格式、中文化
延伸阅读
最新评论