php乱码问题及html不正常显示解决方法

php乱码一般是没有设置字符集导致中文显示不正常,一般是给php设置字符集header,如下:

header('Content-type:text/html;charset=utf-8');

是设置utf-8编码,一般可以解决简单的php乱码.

在实际开发中,问题往往不是那么简单,php文件一般不能有bom头,不然有些地方无法显示或者显示不正常.解决方法是去除bom头或者使用无dom的编辑器.

一般win系统自带的记事本有bom头,只要用它修改文件都会产生bom头,一般是无法看到的,但是它会导致程序无法运行.

如下是php移除dom代码,运行后自动查找当前目录所有文件,自动去除bom头.

 if (isset($_GET['dir'])){
   $basedir=$_GET['dir']; 
 }else{ 
   $basedir = '.'; 
 } 
   
 $auto = 1; 
   
 checkdir($basedir); 
   
 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); 
}