php 去除文件BOM头的要领

本日有小同伴来请教,在php中如何去掉文件的BOM头可能php去除内容中的BOM头。正好本日是周未,也没有什么事,就写一写关于这方面的教程吧。

文件BOM头的先容

在 utf-8 编码的文件头部会含有一个BOM头,它占用三个字节,是用来标示该文件属于utf-8编码。

此刻已经有许多软件都可以识别bom头的,但照旧有一些软件或编程语言是识别不了BOM头的,而php就属于不能识别BOM头的编程语言。

php 删除内容中的BOM头

一般含有BOM头的内容都是从 utf-8 编码的文本文件中提取的,我们可以通过php对内容举办处理惩罚,来到达去掉 BOM 头的目标。

php代码:

<?php //界说一个删除BOM头的PHP函数 function del_bom($contents){ $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) { $rest = substr($contents, 3); return $rest; }else{ return $contents; } } ?>

函数的挪用:

<?php //从 TXT 文件读取内容 $cont = file_get_contents('text.txt'); // 删除内容中的 BOM 头 echo del_bom($cont); ?> php 批量删除文件中的 BOM 头

在利用记事本或一些其它此外编程软件编写PHP文件时,假如操纵不类型很有大概会留有BOM头,假如是单个文件的环境下直接在编程软件中修改下即可,假如文件多了,就要利用批量的处理惩罚要领。下面就来说一个php批量去除文件中bom头的要领。

php代码:

<?php if (isset($_GET['dir'])) { //配置文件目次 $basedir = $_GET['dir']; }else{ $basedir = '.'; } $auto = true; //界说是否去掉文件中的BOM头,假如为 false 则只检测是否含有 BOM 头 checkdir($basedir);//检测目次 function checkdir($basedir){ if ($dh = opendir($basedir)) { while (($file = readdir($dh)) !== false) { if($file{0} == '.'){ continue; } if($file != '.' && $file != '..'){ if (!is_dir($basedir."/".$file)) { echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>"; }else{ $dirname = $basedir."/".$file; checkdir($dirname); } } } closedir($dh); } } //查抄文件是否有BOM头,通过 全局变量 $auto 来节制是否删除文件中的BOM头 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) { $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."); } } //重写文件,以到达删除BOM头的目标 function rewrite ($filename, $data) { $filenum = fopen($filename, "w"); flock($filenum, LOCK_EX); fwrite($filenum, $data); fclose($filenum); } ?>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/8874.html