最近总是从数据库导入导出数据到excel中,但是PHP 操作excel有一点小麻烦,于是就导入,出csv了。Microsoft Excel也能打开csv,这是极好的!!!
在这记录一下,遇到的坑:
1:首先是编码问题,导入时发现,总是乱码,通过iconv这个函数便能轻易解决乱码问题:
$data = eval('return ' . iconv('gbk', 'utf-8', var_export($data, true)) . ';');2:导入时发现用txt文本编辑器打开导出的csv不乱码,正常,但是用excel打开就乱码了,这时因为没有写入bom头的问题,在写入数据前先写入bom头:
fwrite($errFile, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM防止乱码最后一个完整实例代码:
<?php $inputFilePath = $argv[1]; if (!file_exists($inputFilePath)) { die('文件不存在' . PHP_EOL); } $csvFile = fopen($inputFilePath, 'r'); $errFilePath = dirname($inputFilePath) . '/shop_error.csv'; if (file_exists($errFilePath)) { unlink($errFilePath); } //生成错误记录文件 $csv_header = ['品牌id', '商铺名', '经度', '纬度', '地址', '联系电话', '联系人', '商户id', '街道地址码', '营业时间', '第三方商铺id', '账号', '开发id', '导入失败原因']; $errFile = fopen($errFilePath, 'a'); fwrite($errFile, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM防止乱码 $header = implode(',', $csv_header) . PHP_EOL; fwrite($errFile, $header); $header = true; while ($data = fgetcsv($csvFile)) { if (!$header) { // 防止乱码 $data = eval('return ' . iconv('gbk', 'utf-8', var_export($data, true)) . ';'); try { // 插入数据库的代码,,扒拉扒拉一大堆。。。。 echo '导入成功 shop_id= :' . $res['shop_id'] . PHP_EOL; } catch (Exception $e) { // 写入错误记录 $data[] = $e->getMessage() . '(不能为空)'; $content = implode(',', $data) . PHP_EOL; fwrite($errFile, $content); echo '导入记录有误:' . $e->getMessage() . '(不能为空)' . PHP_EOL; } } else { $header = false; } } fclose($errFile); fclose($csvFile); echo 'over' . PHP_EOL;
友情提示:垃圾评论一律封号...