今天有小伙伴来请教,在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")." 
";

}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 ("BOM found, automatically removed.");

} else {

return ("BOM found.");

}

}else{

return ("BOM Not Found.");

}

}

//重写文件,以达到删除BOM头的目的

function rewrite ($filename, $data) {

$filenum = fopen($filename, "w");

flock($filenum, LOCK_EX);

fwrite($filenum, $data);

fclose($filenum);

}

?>

php 去除 bom,php 去除文件BOM头的方法相关推荐

  1. php 去除 bom,PHP批量检测并去除文件BOM头信息代码参考

    因为文件头信息输出BOM头信息,有时会对程序的执行结果造成影响,那么此时即应对这些文件的BOM信息进行去除. 如下代码为PHP方式去除当前目录及子目录所有文件BOM信息的代码,新建文件,将其放倒根目录 ...

  2. Java处理文件BOM头的方式推荐

    背景: java普通的文件读取方式对于bom是无法正常识别的. 使用普通的InputStreamReader,如果采用的编码正确,那么可以获得正确的字符,但bom仍然附带在结果中,很容易导致数据处理出 ...

  3. bom头解释方法和去掉方法

    什么是bom头? 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也 ...

  4. 详解BOM头以及去掉BOM头的方法

    类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM).它是一串隐藏的字符,用于让记事本等编辑器识别 ...

  5. PHP版UTF-8文件BOM自动检测移除程序

    BOM信息是文件开头的一串隐藏的字符,用于让某些编辑器识别这是个UTF-8编码的文件.但PHP在读取文件时会把这些字符读出,从而形成了文件 开头含有一些无法识别的字符的问题. 比如用UTF-8格式保存 ...

  6. python读取ini文件编码格式_Python读取txt(.ini)文件BOM问题

    2018-06-13   11:20:40 在windows上使用open打开utf-8编码的txt文件时开头会有一个多余的字符,它叫BOM,是用来声明编码等信息的,但python会把它当作文本解析 ...

  7. Java读带有BOM的UTF-8文件乱码原因及解决方法(转)

    转载:http://www.linuxidc.com/Linux/2012-12/76707.htm 最近在处理文件时发现了同样类型的文件使用的编码可能是不同的.所以想将文件的格式统一一下(因为UTF ...

  8. Java读取UTF-8格式txt文件第一行出现乱码及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法(转载)...

    原文地址:http://blog.csdn.net/jackpk/article/details/5702964/ Java读取UTF-8的txt文件第一行出现乱码"?"及解决 t ...

  9. Java读带有BOM的UTF-8文件乱码原因及解决方法

    Java读带有BOM的UTF-8文件乱码原因及解决方法 Java读带有BOM的UTF-8文件乱码原因及解决方法 - daimojingdeyu - ITeye技术网站 Java读带有BOM的UTF-8 ...

  10. win7文件夹带锁标志如何去除?win7去除文件夹带锁标志的方法

    win7文件夹带锁标志如何去除?win7去除文件夹带锁标志的方法 http://www.xitongcheng.com/jiaocheng/win7_article_30333.html 具体方法如下 ...

最新文章

  1. C# MVC中返回JSON 对象
  2. 大叔手记(17):大叔2011年读过的书及2012年即将要读的书
  3. java mysql 自动提交_Mybatis的JDBC提交设置/关闭mysql自动提交------关于mysql自动提交引发的惨剧...
  4. 【Linux】一步一步学Linux——arping命令(164)
  5. C#中的Explicit和Implicit了解一下吧
  6. 08-开运算和闭运算
  7. java day27【DQL:查询语句、约束 、多表之间的关系 、范式 、数据库的备份和还原】...
  8. 辐射4核能选项用计算机失败,辐射4NMM安装framework失败解决方法一览_游侠网
  9. Linux-文件结构、快捷键、安装软件和常用命令(1)
  10. layui整合Echart
  11. 线程的先进先出,后进先出,以及优先级队列
  12. 谷歌相机镜像翻转_Google快速翻转:有用还是没用?
  13. python基础 class6(基本统计值计算、文本词频统计)
  14. Camera2 三预览
  15. 关于系统分析师的考试感想
  16. 什么是lims系统,lims(实验室管理系统)
  17. 使用karma + mocha + sinon 测试 Ajax 请求
  18. 别人都在这个春暖花开的端午节吃粽子,而我在踏青学springboot数据持久化
  19. 【笔记】MATLAB 批量注释/批量取消注释
  20. Java基础项目实战--大学生求职招聘信息网站系统

热门文章

  1. 单片机技术与c语言编程教学大纲,《单片机原理及应用》课程教学大纲
  2. 无线覆盖技术的重要性
  3. 37.伪造参数错误的ICMP数据包
  4. RubyOnRails培训大纲
  5. Unix编程艺术-翻译-开篇
  6. 萤火虫算法_一种优化方法:蜂鸟优化算法
  7. 大一微积分笔记整理_大一上学期微积分高数复习要点
  8. ThinkPad T14 Gen3拆机更换升级内存和固态硬盘
  9. Nexus3 安装 及 配置 docker 私有、代理 仓库
  10. nexus3.x批量上传jar包