用php去除bom头

时间:2023-03-09 16:59:46
用php去除bom头
最近在用dede开发一个网站的时候,发现网站在本地没什么问题,但是上传到服务器上面去之后,在首页会默认的生成一串的字符串,如下图所示:
用php去除bom头用php去除bom头

百度了之后,发现好多的解决方法都是说的把文件存储为utf-8无bom模式,但是发现我用了这个方法之后,这字符串还是在~

后面经人提点说有php方法可以去除~然后找到以下代码:

 <?php
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>";
} 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);
}
?>

具体使用方法如下(此流程只针对于php小白~):

1.新建一个php文件,命名你自己随便取,我这里就取名为:withoutBoml.php;

2.将文件上传到根目录下面(所谓的根目录就是wwwroot或者htdocs);

3.然后运行此段php代码:http://你的网站域名/withoutBoml.php(比如说你的网站是www.haha.com,那么就运行http://www.haha.com/withoutBoml.php).

运行完之后再看你的网站,发现真的没有了哦~~

10月24日更新

感谢@ 都瓦克因 ,告诉了我报错原因是return里面输出的html语句双引号冲突了,把最外层的双引号修改为单引号就可以了;