wordpress CMS主题 微信
Home > 网站建设 > 使用UTF-8后页面为什么会不居中显示?

使用UTF-8后页面为什么会不居中显示?

高时银博客 网站建设 点击: 2,189 次 0 0

使用UTF-8后页面为什么会不居中显示?使用wordpress做淘宝客网站时,用记事本保存一个页面为UTF-8格式后,整个页面不居中,而是靠左显示。一直不知道是怎么回事,经过多方考究,最终发现:整个页面输出可能有bom字符。

BOM —— Byte Order Mark,中文名译作“字节顺序标记”。在这里找到一段关于 BOM 的说明:

在UCS 编码中有一个叫做 "Zero Width No-Break Space" ,中文译名作“零宽无间断间隔”的字符,它的编码是 FEFF。而 FFFE 在 UCS 中是不存在的字符,所以不应该出现在实际传输中。UCS 规范建议我们在传输字节流前,先传输字符 "Zero Width No-Break Space"。这样如果接收者收到 FEFF,就表明这个字节流是 Big-Endian 的;如果收到FFFE,就表明这个字节流是 Little- Endian 的。因此字符 "Zero Width No-Break Space" (“零宽无间断间隔”)又被称作 BOM。

UTF-8 不需要 BOM 来表明字节顺序,但可以用 BOM 来表明编码方式。字符 "Zero Width No-Break Space" 的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的字节流,就知道这是 UTF-8编码了。Windows 就是使用 BOM 来标记文本文件的编码方式的。
到网上找了个小程序来检测BOM,这段php程序如下,保存成php文件放在根目录中执行一次就行了(文件名随便),会自动去除所有文件头中的BOM。,果然不出所料,就是BOM在作怪,清除BOM后就好了。网上找的这段代码还真不错,不但能够检测BOM,还能够自动清除BOM,代码如下:

<?php
/*清除rom*/
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")." <br>";
convertN("$basedir/$file"); //加个LINUX换行
}else{
$dirname = $basedir."/".$file;
checkdir($dirname);
}
}
}//end while
closedir($dh);
}//end if($dh
}//end function
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.");
}//end function
function rewrite($filename, $data){
$filenum = fopen($filename, "w");
flock($filenum, LOCK_EX);
fwrite($filenum, $data);
fclose($filenum);
}

function convertN($file) {
$str = file_get_contents($file);
$str = str_replace("\r\n", "\n", $str);
file_put_contents($file, $str, LOCK_EX);
}
?>

将以上代码保存为PHP文件,放入你要清除BOM的文件的文件夹根目录,运行一次即可。
因为自己出现这个问题,所以,写出来希望能帮到也碰到这种问题的朋友们。

 

 


文章作者:高时银博客
本文地址:http://wanlimm.com/7720130928512.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

目前还没有评论。赶快来坐沙发吧。

发表评论