问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php读取csv文件时 用phpexcel很慢 用fgetcsv()函数中文乱码 请问还有什么excel库或函数方法来读csv文件吗

发布网友 发布时间:2022-04-06 06:53

我来回答

2个回答

懂视网 时间:2022-04-06 11:14

php读取csv时中文乱码的解决办法:

1、首先讲linux,不管是centos或者Ubuntu。在导入csv的php脚本文件头部加上如下代码:

setlocale(LC_ALL,array('zh_CN.gbk','zh_CN.gb2312','zh_CN.gb18030'));

这段代码的作用是改变脚本默认编码,因为操作系统的编码格式不是GBK所以,读取中文的时候会乱码。

49c09ca4662002be21bfd8b781a4867.png

2、接着讲windows,我们在读取csv数据的时候,会有一个while循环遍历每一行的数据,而读取的每一行数据,就需要我们进行转义,将中文编码读取出来。代码如下:

$row = eval('return '.iconv('gbk','utf-8',var_export($row,true)).';');

$row,就是读取出来每一行的数据变量。

9d5a8c57d5b9e830c3a25789c0a6008.png

3、最后,贴一个fgetcsv()方法的替代函数,这种是针对有些老版本的php该函数自带着一些bug的情况。如果上边两点还是没办法解决您的问题,您可以尝试一下使用该函数,与前边两点配合使用。

function fgetcsv_reg(& $handle, $length = null, $d = ',', $e = '"') {
 $d = preg_quote($d);
 $e = preg_quote($e);
 $_line = "";
 $eof=false;
 while ($eof != true) {
 $_line .= (empty ($length) ? fgets($handle) : fgets($handle, $length));
 $itemcnt = preg_match_all('/' . $e . '/', $_line, $dummy);
 if ($itemcnt % 2 == 0)
  $eof = true;
 }
 $_csv_line = preg_replace('/(?: |[ ])?$/', $d, trim($_line));
 $_csv_pattern = '/(' . $e . '[^' . $e . ']*(?:' . $e . $e . '[^' . $e . ']*)*' . $e . '|[^' . $d . ']*)' . $d . '/';
 preg_match_all($_csv_pattern, $_csv_line, $_csv_matches);
 $_csv_data = $_csv_matches[1];
 for ($_csv_i = 0; $_csv_i < count($_csv_data); $_csv_i++) {
 $_csv_data[$_csv_i] = preg_replace('/^' . $e . '(.*)' . $e . '$/s', '$1', $_csv_data[$_csv_i]);
 $_csv_data[$_csv_i] = str_replace($e . $e, $e, $_csv_data[$_csv_i]);
 }
 return empty ($_line) ? false : $_csv_data;
}

496ade1d4ee472a66ecde4c9574caf3.png

相关学习推荐:PHP编程从入门到精通

热心网友 时间:2022-04-06 08:22

php从csv文件读取数据并输出到网页的方法

<?php
$fp = fopen('sample.csv','r') or die("can't open file");
print "<table>\n";
while($csv_line = fgetcsv($fp)) {
  print '<tr>';
  for ($i = 0, $j = count($csv_line); $i < $j; $i++) {
    print '<td>'.htmlentities($csv_line[$i]).'</td>';
  }
  print "</tr>\n";
}
print '</table>\n';
fclose($fp) or die("can't close file");
?>

你可以这样试一试的啊

追问谢谢回复 试过了 windows电脑上用wps软件导出的表格是gbk 想要fgetcsv()显示中文就得先用iconv('GBK','UTF-8',$filename)转换编码为UTF-8在读取循环或者遍历输出 但是最后在前台显示的还是乱码中文...

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
传奇世界退师和出师同样能得到声望吗 声望可以转让吗? 传奇世界 声望怎么弄,最快弄声望的方法? 传奇世界 声望问题徒弟问题 天龙八部2中的哪个门派最牛逼啊 天龙八部手游哪个门派厉害 天龙八部手游门派排名 天龙八部里,三大最强门派,第一实至名归! miui13怎么开启dc调光 小米14怎么样小米14有没有DC调光功能【详解】 小米14dc调光是什么意思 php 如何正确读取unicode文件 并转换成utf8输出 - 技术问答 在PHP中,用自定义函数,用于判断输入的整数是否为质数。并输出1-100之间所有的? 用PHP如何判断用户输入的内容为数字(可以是小数的)? 用php判断两个数字的大小和差值 两个数字均为整数 php任意输入一个整数,使用函数的方法判断该数是否为偶数 php判断表单的文本框输入是否为整数1或者2或者0 php判断是否是正整数的函数是那个 用PHP语言编写一个自定义函数,该函数可以实现判断一个数是否是整数的功能. php判断大于32位的整数 关于PHP中如何判断一个变量是不是整数 php连接mysql数据库的问题 phpstorm连接mysql数据库404报错。 php连接mysql数据库代码错误是为什么??? php连接mysql出错 Table &#39;test.user&#39; doesn&#39;t exist PHP链接MySQL数据库失败 数据库连不上,为什么我写的PHP代码一直连不上mysql数据库 报错=Fatal error: Ca 急急急!!php连接Mysql数据库时报错如下:是什么原因啊?高手帮忙解决下吧,先谢谢了!可以追加激励分的! 我想问一下,使用php向mysql插入数据,为什么报错?插入不了? php连接mysql数据库报错 PHP中出现乱码怎么办 这个php代码读出来的csv文件,在网页上显示乱码!请高手指教啊 php读取CSV文件时,无法读取汉字,编码已强制GB2312 php解析csv时,特定汉字会导致逗号识别不出来 公司建立了个局域网购物网站(使用的是仿淘宝PHP源代码),但购物时需要在线支付,怎么取消啊? php怎么写连连支付退款 php,一个php页面是下订单,另外一个页面显示所有客户订单内容,如订单时间,购买内容等,请问怎么实现? 怎么用php来编写一个定时器,比如说订票,距离开车时间半个小时内就不能再预定了,这个功能怎么实现呢? 如何php实现 回复td退订短信功能 PHP点击确认弹出确认和取消对话框 新手PHP购物车订单问题,大神求救。。加分++ PHP 读取两个不同用户的txt文件,会输出两种不同的编码,请问如何把他们的字符编码统一,进入DB会乱码啊 linux php 安装curl出错 如何将Ubuntu下PHP5.5.9降为PHP5.4.39 php7 怎么安装mcrypt模块 如何让先安装的php支持mysql php mysql gone away 怎么捕获错误 php子类能不能重写父类的private属性? php 面向对象中类内方法调用方法,可取吗? .htaccess文件能否设置多个重写规则? php流程控制的类型有哪些