php中file_get_contents读取文件出现乱码如何解决

发布时间:2024-10-15 18:19:54 阅读:3次

在使用file_get_contents函数读取文件时出现乱码通常是因为文件编码不匹配导致的。解决方法有以下几种:

指定文件编码:可以使用第三个参数$context来指定文件编码,例如:
$file_contents = file_get_contents('file.txt', false, stream_context_create([

'http' => [
    'header' => 'Content-Type: text/plain; charset=utf-8'
]

]));
复制代码
使用iconv函数转换编码:可以使用iconv函数将文件内容转换为指定编码,例如:
$file_contents = file_get_contents('file.txt');
$file_contents = iconv('gbk', 'utf-8', $file_contents);
复制代码
修改文件编码:可以通过文本编辑器修改文件的编码为UTF-8,以确保文件编码与读取时的编码一致。
通过以上方法应该可以解决使用file_get_contents读取文件出现乱码的问题。
https://cloud.tencent.com/developer/article/1480645
最近拉取了京东结算订单csv文件,结果发现在用file_get_contents获取内容的时候,中文出现了乱码,感觉京东这么大,这个技术问题他们帮忙解决才好吧,想想还是算了,自己动动手的问题。

大概我也能猜到,京东的系统默认应该都不是utf-8的编码,大多数还是gbk或者是gb2312,因为之前使用过类似的国内产品,可能是由于历史原因,这个不深究了,

$content = '';
$text = file_get_contents($file);

//$encodType = mb_detect_encoding($text);
define('UTF32_BIG_ENDIAN_BOM', chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));
define('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));
define('UTF16_BIG_ENDIAN_BOM', chr(0xFE) . chr(0xFF));
define('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));
define('UTF8_BOM', chr(0xEF) . chr(0xBB) . chr(0xBF));
$first2 = substr($text, 0, 2);
$first3 = substr($text, 0, 3);
$first4 = substr($text, 0, 3);
$encodType = "";
if (UTF8_BOM == $first3) {
    $encodType = 'UTF-8 BOM';
} else if (UTF32_BIG_ENDIAN_BOM == $first4) {
    $encodType = 'UTF-32BE';
} else if (UTF32_LITTLE_ENDIAN_BOM == $first4) {
    $encodType = 'UTF-32LE';
} else if (UTF16_BIG_ENDIAN_BOM == $first2) {
    $encodType = 'UTF-16BE';
} else if (UTF16_LITTLE_ENDIAN_BOM == $first2) {
    $encodType = 'UTF-16LE';
}

//下面的判断主要还是判断ANSI编码的·
if ('' == $encodType) {
    //即默认创建的txt文本-ANSI编码的
    $content = iconv("GBK", "UTF-8", $text);
} else if ('UTF-8 BOM' == $encodType) {
    //本来就是UTF-8不用转换
    $content = $text;
} else {
    //其他的格式都转化为UTF-8就可以了
    $content = iconv($encodType, "UTF-8", $text);
}

如有问题,可以QQ搜索群1028468525加入群聊,欢迎一起研究技术

支付宝 微信

有疑问联系站长,请联系QQ:QQ咨询

转载请注明:php中file_get_contents读取文件出现乱码如何解决 出自老鄢博客 | 欢迎分享