今天帮朋友搞网站http://www.heback.com的时候发现顶部有空行,用chrome查看代码有个
模板文件生成html文件之后会在body开头处加入一个可见的控制符,导致页面头部会出现一个空白行。原因是页面的编码是UTF-8 + BOM。
另外还有个很有意思的小程序,放在站点根目录下运行,会把目录下全部utf-8文件的bom头去掉,代码如下:
//remove the utf-8 boms
//by magicbug at gmail dot com
if
(isset(
$_GET
[
'dir'
])){
//config the basedir
$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>";
}
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
(
"<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
);
}