PHP 去除string中的bom「原创」

1. 什么是BOM

BOM全称为Byte Order Mark,是一个位于文件头部的不可见字符,用于指示一个文本文件的字符编码方式。

1.1 UTF-8编码的BOM

UTF-8编码实际上在表现形式上不需要BOM,因为UTF-8的字节序是不重要的。但有时候仍然会出现UTF-8带BOM的情况,这主要是由于一些操作系统或编辑器的缺陷导致的。在UTF-8编码中,BOM有以下三种形式:

0xEF, 0xBB, 0xBF // UTF-8 with BOM

2. BOM的问题

虽然BOM为文件编码方案提供了标识,但也带来了一些问题,如:

2.1 文件格式判断失败

某些文本编辑器没有正确地处理BOM,导致判断文件格式出错。例如,PHP代码在调用file_get_contents()函数读取某个UTF-8编码的文件时,如果该文件带有BOM,则会导致判断文件格式为binary。

2.2 输出HTML页面时出现乱码

在PHP中使用header()函数指定输出的Content-Type为text/html时,如果页面中包含BOM,则会导致输出乱码。

3. PHP去除BOM的方法

3.1 使用substr()函数去除BOM

可以通过使用substr()函数来删除字串前三个字符(即BOM)。

function removeBOM($str="") {

if(substr($str, 0, 3) == pack("CCC", 0xEF, 0xBB, 0xBF)) {

$str = substr($str, 3);

}

return $str;

}

3.2 使用preg_replace()函数去除BOM

使用preg_replace()函数可以匹配字串开头的BOM,并将其替换掉。

function removeBOM($str="") {

$str = preg_replace('/\x{EF\xBB\xBF}/', '', $str);

return $str;

}

3.3 使用iconv()函数去除BOM

iconv()函数可以将BOM转换为空字符串,从而去除BOM。

function removeBOM($str="") {

return iconv("UTF-8", "UTF-8//IGNORE", $str);

}

后端开发标签