织梦UTF-8文件BOM信息自动检测和自动清除操作
栏目:DedeCMS 来源:网络 关注:0 时间:2019-08-25
BOM信息是文件开头的一串隐藏的字符,用于让某些编辑器识别这是个UTF-8编码的文件。
特别是当你用记事本修改网页文件或者PHP文件时,会产生BOM信息,通过审查元素会在body开头处发现一个可见的控制符,导致页面头部会出现一个空白行;如果是织梦CMS的程序也会引起验证码不显示等问题。
BOM自动检测和自动清除工具
新建PHP文件“bom.php”,将下面源码复制到“bom.php”,再保存。
<?php
/**
* bom.php
* @description 这里代码为PHP方式去除当前目录及子目录所有文件BOM信息,只要将此代码文件放到根目录下,然后浏览器运行访问就可以了
* @demo http://www.q0738.com/bom.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);
}
将“bom.php”文件放到网站根目录,打开浏览器,输入:http://域名/bom.php
打开后等待几十秒,让文件执行自动清除文件的bom,有问题的文件会有红色文字提示,文件会自动处理好。
执行完后,删除“bom.php”文件,防止被别人利用。
还有一种情况是不是在body下面,而是在其他代码下面的
那就要检查当前模板代码开始的地方是不是多写了其他东西,把多余的东西删除即可。
本文标题:织梦UTF-8文件BOM信息自动检测和自动清除操作
本文地址:http://www.q0738.com/dedecms/18580.html