csv文件可以使用excel打开并进行一些操作了,同时我们用php导入csv文件是非常的简单了,所以我们通常会使用php来导出csv了,但有时会碰到在使用Excel打开csv时出现乱码问题了,下面我们就来看解决办法。
乱码情况:
写了一段导出 CSV 文件的代码,可以正常输出。
使用 CSV 和 TXT 程序打开文件是正常的,但是使用 Excel 打开文件就出现了中文乱码的问题(这就奇怪了, 为什么在 Excel 中会乱码呢?)
通过查看编码发现,导出的 CSV 文件是 UTF-8 无BOM编码格式,而我们通常使用 UTF-8 编码格式 都是有 BOM 的。
尝试着添加了 BOM 之后,中文乱码的问题有解决了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | /** * 数据导出成CSV文档 * @param: array $data 需要导出的数据 * @param: string $title 导出的文件名字 */ private function excel( $title = '' , $data ) { if ( empty ( $title )) $title = date ( 'Y-m-d H:i:s' ); header( "Content-type:text/csv;" ); header( "Content-Disposition:attachment;filename={$title}.csv" ); header( 'Cache-Control:must-revalidate,post-check=0,pre-check=0' ); header( "Content-Encoding: binary" ); header( 'Expires:0' ); header( 'Pragma:public' ); $td = "id,分类,内容,用户,手机,设备,版本,时间\n" ; foreach ( $data as $k => $v ) { $content = str_replace ( array ( "\r" , "\n" ), array ( "" , "" ), $v [ "content" ]); $td .= "{$v['id']},{$v['catid']},{$content},{$v['uname']},{$v['phone']},{$v['machine']},{$v['version']},{$v['update_time']}\n" ; } echo ( chr (0xEF). chr (0xBB). chr (0xBF)); echo $td ; } |
下面再贴出一个给文件加BOM编码的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 | /** * 给文件加BOM编码 * @param: $filepath 文件路径 */ public function AddBOM( $filepath ) { $file = fopen ( $filepath , 'w' ); fwrite( $file , chr (0xEF). chr (0xBB). chr (0xBF)); // 添加 BOM foreach ( $contens as $content ) { fputcsv ( $file , $content ); } fclose( $file ); } |
转载请注明来源地址:小川编程 » https://www.youhutong.com/index.php/article/index/125.html
1、本站发布的内容仅限用于学习和研究目的.请勿用于商业或非法用途,下载后请24小时内删除。
2、本站所有内容均不能保证其完整性,不能接受请勿购买或下载,如需完整程序,请去其官方购买正版使用
3、本站联系方式Email:admin@youhutong.com ,收到邮件会第一时间处理。
4、如侵犯到任何版权问题,请立即告知本站(立即在线告知),本站将及时删除并致以最深的歉意