在使用DEDECMS 5.3/5.5/5.6等版本的UTF版本经常会遇到一个问题,就是后台登录会什么都不显示,空白一片,这是什么原因呢?
一般这个问题都是由于使用了“记事本”而没有使用专业的文本编辑软件来编辑DEDE模板文件造成的,一般是由于修改了以下几个文件:
include/common.inc.php
data/common.inc.php
dede/config.php
如果你使用了“记事本”之类的修改这些文件,修改后都会在文件中加上BOM,造成程序不能正常运行。
可以使用下面的代码来清除文件中的BOM,解决DEDE模板后台列表和登录空白的问题:
Cs_BomKill.php代码:
<?php //此文件用于快速测试UTF8编码的文件是不是加了BOM,并可自动移除 $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")." <br>"; } 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 ("<font color=red>BOM found, automatically removed.</font>"); } else { return ("<font color=red>BOM found.</font>"); } } else return ("BOM Not Found."); } function rewrite ($filename, $data) { $filenum=fopen($filename,"w"); flock($filenum,LOCK_EX); fwrite($filenum,$data); fclose($filenum); } //结束 ?>
BOM是什么意思?
BOM 是“Byte Order Mark”的缩写,用于标记文件的编码。并不是所有的文本编辑工具都能识别BOM标记.在用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte Order Mark)。
评论前必须登录!
注册