php csv乱码问题,如何解决php csv乱码问题

php csv乱码问题,如何解决php csv乱码问题phpcsv 乱码的解决办法 首先重写 fputcsv 方法 然后添加转码功能 代码如 functionfput handle array fields delimiter PHP 导出 CSV 中文乱码的解决方法 UTF 8 转 GB2312 一 背景因项目需求 要导出 Excel 表格数据 使用 fputcsv 方法导出数据遇到中文乱码 去网上查找了一遍解决方法 1 设置 he

php csv乱码的解决办法:首先重写fputcsv方法;然后添加转码功能,代码如“function fputcsv2($handle, array $fields, $delimiter = “){…}”。

67ad944f1b8c870c3899d1752be4e6bb.png

PHP导出CSV中文乱码的解决方法:UTF-8转GB2312

一、背景

因项目需求,要导出Excel表格数据,使用fputcsv方法导出数据遇到中文乱码,去网上查找了一遍解决方法。

1)设置header编码修改为UTF-8

2)在输出内容前先输出BOM头

以上两种方法均无效,不知是否我的环境原因还是其他,暂不去深究。

二、解决方法

由于项目默认是UTF-8编码,Excel不支持,所以得把UTF-8转GB2312。

【核心】重写fpucsv方法,添加转码功能:/

* 重写fputcsv方法,添加转码功能

* @param $handle

* @param array $fields

* @param string $delimiter

* @param string $enclosure

* @param string $escape_char

*/

function fputcsv2($handle, array $fields, $delimiter = “,”, $enclosure = ‘”‘, $escape_char = “\\”) {

foreach ($fields as $k => $v) {

$fields[$k] = iconv(“UTF-8”, “GB2312//IGNORE”, $v); // 这里将UTF-8转为GB2312编码

}

fputcsv($handle, $fields, $delimiter, $enclosure, $escape_char);

}

使用例子:function test () {

// 文件名

$filename = “订单查询结果” . date(‘Y-m-d H:i:s’);

// 设置输出头部信息

header(‘Content-Encoding: UTF-8’);

header(“Content-Type: text/csv; charset=UTF-8”);

header(“Content-Disposition: attachment; filename={$filename}.csv”);

$tableHead = array(‘#’, ‘订单id’, ‘订单号’, ‘分类’, ‘客户信息’, ‘工匠信息’, ‘订单状态’, ‘施工状态’, ‘付款状态’, ‘订单金额’, ‘下单时间’, ‘备注’);

// 获取句柄

$output = fopen(‘php://output’, ‘w’) or die(“can’t open php://output”);

// 输出头部标题

fputcsv2($output, $tableHead);

$list = array();

foreach ($list as $item) {

fputcsv2($output, array_values($item));

}

// 关闭句柄

fclose($output) or die(“can’t close php://output”);

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216983.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午10:37
下一篇 2026年3月18日 上午10:37


相关推荐

  • 由中序遍历和后序遍历还原二叉树_二叉树的中序列

    由中序遍历和后序遍历还原二叉树_二叉树的中序列二叉树的前序遍历、中序遍历和后序遍历之间还原二叉树1、概念(1)前序遍历   a、访问根节点;b、前序遍历左子树;c、前序遍历右子树。(2)中序遍历   a、中序遍历左子树;b、访问根节点;c、中序遍历右子树。(3)后序遍历   a、后序遍历左子树;b、后续遍历右子树;c、访问根节点。2、前序遍历和中序遍历还原二叉树思想如下:  a、根据前序遍历结果,第一个元素为二叉树的根结…

    2025年11月16日
    4
  • html半透明遮罩,div半透明遮罩效果

    html半透明遮罩,div半透明遮罩效果css 如何实现鼠标移至图片上显示遮罩层及文字 1 首先看看 HTML 一个 img 图像控件和一个带掩码样式的 div 其中包含文本 这是蒙版层 2 然后 查看样式定义 首先 查看图像容器和图像的样式 如图所示 这主要是准备我们的绝对定位口罩 3 看看蒙版层的样式定义 代码如图所示 js 如何实现点击图片弹出窗口并放大这张图片 弹出的悬赏币不够了麻烦大神辛苦点这是我的作业通过 JS 代码 document

    2026年3月20日
    2
  • 国内 Claude Code 接入指南(免费获得国内代理$100额度)

    国内 Claude Code 接入指南(免费获得国内代理$100额度)

    2026年3月16日
    2
  • python运行代码不成功_Python | PyCharm无法直接运行(Run)脚本

    python运行代码不成功_Python | PyCharm无法直接运行(Run)脚本1刚开始是这样,笔者在PyCharm新建了一个package,然后放了一个脚本2发现无法直接运行:没有Run选项,只有Rununittests选项。于是把脚本拷贝到另一个不是package的目录下3发现在这个目录下,除了这个脚本以外,其余的脚本都是可以运行的4看来是脚本的内容有问题了。看看笔者这个cannot_run的脚本5笔者在Python自带的交互环境IDLE上,运行这个代码,也是正常的。真…

    2022年8月29日
    6
  • vc++连接sql数据库_vscode怎么连接数据库

    vc++连接sql数据库_vscode怎么连接数据库vc连接mysql数据库的方法:首先打开VC6;然后在中间列表框中添加本地安装MySQL的include目录路径;接着选中“Libraryfiles”并添加MySQL的Lib目录路径;最后进行编程测试即可。一、MySQL的安装Mysql的安装去官网下载就可以。。。最新的是5.7版本。。二、VC6.0的设置(1)打开VC6.中选0工具栏Tools菜单下的Options选项,在Directorie…

    2022年8月12日
    8
  • MyBatis-Plus 分页查询以及自定义sql分页

    MyBatis-Plus 分页查询以及自定义sql分页一、引言分页查询每个人程序猿几乎都使用过,但是有部分同学不懂什么是物理分页和逻辑分页。物理分页:相当于执行了limit分页语句,返回部分数据。物理分页只返回部分数据占用内存小,能够获取数据库最新的状态,实施性比较强,一般适用于数据量比较大,数据更新比较频繁的场景。逻辑分页:一次性把全部的数据取出来,通过程序进行筛选数据。如果数据量大的情况下会消耗大量的内存,由于逻辑分页只需要读取数据库…

    2022年6月26日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号