明明样式都设置好了,可还是有空白行。这是因为页面编码时加了BOM,才导致的空白行,怎么也去不掉。

由于使用UTF-8编码,在编写或修改代码后都保存为UTF-8编码格式。虽然现在几乎所有的文本编辑软件都可以显示并编辑UTF-8编码的文件,但是很遗憾的是其中很多软件的表现并不理想。

类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(_0xEF _0xBB _0xBF,即BOM:Byte Order Mark)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但对于 PHP来说,PHP在设计时就没有考虑BOM的问题,不会忽略UTF-8编码的文件开头BOM的那三个字符,会把BOM作为该文件开头正文的一部分。由于必须在

  解决:清除文件的头部BOM.

把以下代码复制到一个PHP文件里面,运行该PHP文件,就可以批量清除该文件相同目录下所有文件的头部BOM

";  
           }else{  
                   $dirname = $basedir."/".$file;  
                   checkdir($dirname);  
              }  
           }  
       }  
       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 found.");  
       }  
    }else return ("BOM Not Found.");  
}  
function rewrite ($filename, $data) {  
    $filenum = fopen($filename, "w");  
    flock($filenum, LOCK_EX);  
    fwrite($filenum, $data);  
    fclose($filenum);  
}  
?>

指定目录或文件清除BOM:

";
}
function checkdir($basedir){  
    if ($dh = opendir($basedir)) {  
       while (($file = readdir($dh)) !== false) {  
           if ($file != '.' && $file != '..'){  
              if (!is_dir($basedir."/".$file)) {  
                   echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." 
"; }else{ $dirname = $basedir."/".$file; checkdir($dirname); } } } 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 found."); } }else return ("BOM Not Found."); } function rewrite ($filename, $data) { $filenum = fopen($filename, "w"); flock($filenum, LOCK_EX); fwrite($filenum, $data); fclose($filenum); } ?>

请为这篇文章评分:
( 这篇文章尚未评分 )

Tags: none

Related Posts:
  • [尚无相关文章]

评论已关闭