php 自动识别 GBK转换UTF8的方法(源码)

不多说了,看标题就明白了,生产环境的代码,需要的拿去。

如果用得上,感恩您的打赏

  • 检查是否为UTF-8字符集
  • 检查是否为UTF-8 BOM文件
  • 将GBK文件转换成UTF8文件
  • 检查是否带UTF-8的BOM头
  • 移除字符串的BOM

 

<?php

/**
 * 字符串BOM检测以及UTF-8的转换处理
 * @author JerryLi
 *
 */
class StringBom{
    /**
     * 移除字符串的BOM
     *
     * @param  string $str 输入字符串
     * @return string 输出字符串
     */
    static public function removeBOM($str): string{
        return self::checkBom($str)?substr($str, 3):$str;
    }
    /**
     * 检查是否带UTF-8的BOM头
     * @param string $str
     * @return boolean
     */
    static public function checkBom($str): bool{
        $str_3 = substr($str, 0, 3);
        return $str_3 == pack('CCC',0xef,0xbb,0xbf);
    }
    /**
     * 检查是否为UTF-8 BOM文件
     * @param string $sFileName 文件名
     * @return boolean
     */
    static public function isBomFile(string $sFileName): bool{
        $hf = fopen($sFileName, 'r');
        if (false !== $hf){
            $str = fgets($hf,3);
            fclose($str);
            return self::checkBom($str);
        }else{
            return false;
        }
    }
    /**
     * 检查是否为UTF-8字符集
     * @param string $sStr
     * @return boolean
     */
    static public function isUtf8(string $sStr): bool{
        $sFileType = mb_detect_encoding($sStr , array('UTF-8','GBK','LATIN1','BIG5'));
        return $sFileType === 'UTF-8';
    }
    /**
     * 检测文件是否为UTF-8字符集的文件
     * @param string $sFileName 文件名
     * @return boolean
     */
    static public function isUtf8File(string $sFileName): bool{
        if (file_exists($sFileName)){
            return self::isUtf8(file_get_contents($sFileName));
        }else{
            return false;
        }
    }
    /**
     * 将GBK文件转换成UTF8文件
     * @param string $sFileName 文件名
     * @return boolean
     */
    static public function convertGbk2Utf8File(string $sFileName): bool{
        if (file_exists($sFileName)){
            file_put_contents($sFileName, iconv('GBK','UTF-8', file_get_contents($sFileName)));
            return true;
        }
        return false;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值