今天做php的一个上传TXT文件的小功能时,由于网站采用的是UTF-8编码的方式,所以需要对上传文件的编码进行判断,只有UTF-8编码的文本文件才可以上传,网上搜索了一些别人写的判断函数发现基本上不能用或者说判断的不准确,索性自己就研究了下写了一个,判断的准确率还可以!

php 判断文件编码的方法

定义一个php判断编码的函数

可以利用 php 中转换字符编码的函数 mb_convert_encoding(),对文件的内容进行不同的编码类型转换,再与原有的内容进行比较!

function getcodetype($file) {
    $list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
    $str = file_get_contents($file);
    foreach ($list as $item) {
        $tmp = mb_convert_encoding($str, $item, $item);
        if (md5($tmp) == md5($str)) {
            return $item;
        }
    }
    return null;
}

函数调用

只需要传入要判断文件的路径即可,可以判断php文件,文本文件等,函数会输出文件的编码类型,如果输出为空则表示没有找到文件的编码类型!

echo getcodetype('text.txt');
// UTF-8
echo getcodetype('user/code.php');
// UTF-8

PS:上面的函数中,可以自己多定义一些编码的类型或调整它们的顺序,这里主要为了效率只写几个!