Linux下去除文件中的BOM头

在windows环境下,用记事本打开任何一个文本文件,另存为utf-8格式后,这样文件就自动被加上了BOM头信息

BOM(Byte Order Mark)是一个字节顺序标签,类似一个标记,又叫签名,用来告诉编辑器当前文件采用何种编码,方便编辑器识别。除了unicode编码,一般的编码集并不会出现bom头。对于utf-16和utf-32,如果不指定bom头,解析程序就默认为ansi编码,从而出现乱码;而对于utf-8,BOM头指定与否,解析程序都可判断。

现在几乎所有的文本编辑软件都可以显示并编辑UTF-8编码的文件,但其中很多的表现并不理想。类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符0xEF、0xBB和0xBF,即BOM。对于一般的文件,这样做并不会产生麻烦。但对于 PHP来说,BOM是个大麻烦。因为PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。同时根据嵌入式语言的特点,这串字符最终将被直接执行(显示)出来。

解决方法:

首先寻找BOM头文件 输入

grep -r -I -l $'^\xEF\xBB\xBF' ./

来寻找当前文件夹以及子文件夹中带有BOM头的文件

输入以下代码来替换BOM头文件

还可以使用以下PHP脚本来检测当前文件夹中有BOM头的文件(但是不会扫描子文件夹)

使用Notepad++去除BOM头

使用Sublime去除BOM头

或者

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181220G0S2KV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券