当前位置:  开发笔记 > 编程语言 > 正文

在PHP中检测文件编码

如何解决《在PHP中检测文件编码》经验,为你挑选了3个好方法。

我有一个脚本,它将多个文件合并为一个,当其中一个文件具有UTF8编码时,它会中断.我认为我应该utf8_decode()在读取文件时使用该函数,但我不知道如何判断哪个需要解码.

我的代码基本上是:

$output = '';
foreach ($files as $filename) {
    $output .= file_get_contents($filename) . "\n";
}
file_put_contents('combined.txt', $output);

目前,在UTF8文件的开头,它在输出中添加了这些字符: 



1> Ben Blank..:

尝试使用该mb_detect_encoding功能.此函数将检查您的字符串并尝试"猜测"其编码是什么.然后,您可以根据需要进行转换.作为brulak建议,不过,你可能会更好过转换 UTF-8,而不是,保存您传输的数据.


mb_detect_encoding()无法正确检测文本中的编码更改。因此,我脚本第2行中的解决方法:/sf/ask/17360801/

2> powtac..:

为了确保输出是UTF-8,无论输入是什么类型,我都使用此检查:

if(!mb_check_encoding($output, 'UTF-8')
    OR !($output === mb_convert_encoding(mb_convert_encoding($output, 'UTF-32', 'UTF-8' ), 'UTF-8', 'UTF-32'))) {

    $output = mb_convert_encoding($content, 'UTF-8', 'pass'); 
}

// $output is now safely converted to UTF-8!


第二个`mb_convert_encoding`调用中的`$ content`也不应该是'$ output`吗?否则,`$ content`来自哪里?
如果有人想知道"pass"=>如果设置了"pass",则不执行字符编码转换.http://php.net/manual/en/mbstring.supported-encodings.php

3> 小智..:

mb_detect_encoding功能应该是你的最后选择.这可能会返回错误的编码.Linux命令file -i /path/myfile.txt运行良好.在PHP中,您可以使用:

function _detectFileEncoding($filepath) {
    // VALIDATE $filepath !!!
    $output = array();
    exec('file -i ' . $filepath, $output);
    if (isset($output[0])){
        $ex = explode('charset=', $output[0]);
        return isset($ex[1]) ? $ex[1] : null;
    }
    return null;
}

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有