一般是用了记事本打开了UTF-8的文档,记事本一类非专业程序添加了没用的字符(会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM))对于一般的文件,这样并不会产生什么麻烦。但对于 PHP来说,BOM是个大麻烦。
window编辑器如果保存为utf8文件就会帮你加上BOM头,以告诉其他编辑器以utf8来显示字符
但是在网页上并不需要添加BOM头识别,因为网页上可以使用 head头 指定charset=utf8告诉浏览器用utf8来解释。但是你用window自动的编辑器,编辑,然后有显示在网页上这样就会显示出0xEF 0xBB 0xBF这3个字符。这样网页上就需要去除0xEF 0xBB 0xBF,可以使用editplus 选择不带BOM的编码,这样就可以去除了。
对于网页已经出现问题而不知道的该如何解决呢?
====================================================
//此文件用于快速测试UTF8编码的文件是不是加了BOM,并可自动移除
//By dELETE
//直接将本文件放置在需检测的目录下在地址栏输入“http://您的域名/目录/本文件名”
$basedir="."; //修改此行为需要检测的目录,点表示当前目录
$auto=1; //是否自动移除发现的BOM信息。1为是,0为否。
//以下不用改动
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file!='.' && $file!='' && !is_dir($basedir."/".$file)) echo "filename: $file ".checkBOM("$basedir/$file")。"
";
}
closedir($dh);
}
function checkBOM ($filename) {
global $auto;
$contents=file_get_contents($filename);
$charset[1]=substr($contents, 0, 1);
$charset[2]=substr($contents, 1, 1);
$charset[3]=substr($contents, 2, 1);
if (ord($charset[1])==239 && ord($charset[2])==187 && ord($charset[3])==191) {
if ($auto==1) {
$rest=substr($contents, 3);
rewrite ($filename, $rest);
return ("BOM found, automatically removed.");
} else {
return ("查找到BOM头文件,已删除!");
}
}
else return ("没有BOM文件,请寻找其他问题!");
}
function rewrite ($filename, $data) {
$filenum=fopen($filename,"w");
flock($filenum,LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}
//结束
?>
====================================================
把以上代码存为killbom.php放到要检测的目录在浏览器地址栏输入:“http://您的域名/目录/killbom.php”就可以解决UTF-8文件空白的问题了!