You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决PHP读取CSV文件时UTF-8字符显示异常的问题

PHP读取CSV文件UTF-8字符显示异常解决方案

问题原因

原有代码存在两处核心问题导致乱码:

  1. 编码转换逻辑位置错误:转码操作放在了文件读取、内容输出完成之后,实际输出到页面的内容没有经过任何编码转换处理,末尾的mb_convert_encoding和str_getcsv逻辑完全没有生效
  2. 未提前声明输出页面的编码格式,浏览器会使用默认编码解析内容,进一步提升了乱码概率

修复步骤

  • 首先在所有输出之前声明页面编码为UTF-8,避免浏览器解析时编码不匹配
  • 将编码转换逻辑移入fgetcsv的循环内,每读取到一个字段就做转码处理后再输出
  • 不要用auto作为编码检测参数,自动检测准确率极低。你可以用文本编辑器(比如Notepad++)打开CSV文件,查看右下角标注的实际编码,常见的CSV编码包括GBK、GB2312、ISO-8859-9、UTF-8带BOM几种,明确填写到转码参数里即可

修复后完整代码

<?php
// 声明页面编码为UTF-8,必须放在代码最顶部,不能有任何前置输出(包括空格、HTML标签)
header('Content-Type: text/html; charset=utf-8');

$row = 1;
if (($handle = fopen("Liste.csv", "r")) !== FALSE) {
    // 可选配置:如果你的CSV是UTF-8带BOM格式,保留以下三行去掉BOM头,否则可以删除
    $bom = fread($handle, 3);
    if ($bom != pack("CCC",0xef,0xbb,0xbf)) {
        rewind($handle);
    }

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $row satırındaki $num alan: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            // 第三个参数请替换为你CSV的实际编码,比如GBK、ISO-8859-9等
            echo mb_convert_encoding($data[$c], "UTF-8", "GBK") . "<br />\n";
        }
     }
    fclose($handle);
}
?>

注意事项

如果调整编码参数后仍有乱码,优先再次核对原CSV的实际编码,确保转码源参数填写正确即可。

内容的提问来源于stack exchange,提问作者Jagger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:45:03