PHP生成UTF-8编码的CSV文件用Excel打开中文显示乱码,是由于输出的CSV文件中没有BOM,我们只要简单处理一下即可,那么如何在PHP中输出BOM呢?在所有内容输出之前:
print(chr(0xEF).chr(0xBB).chr(0xBF));
例.php生成csv时我们可以这样:
- <?php
- $now = gmdate("D, d M Y H:i:s");
- header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
- header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
- header("Last-Modified: {$now} GMT");
-
-
- header("Content-Type: application/force-download");
- header("Content-Type: application/octet-stream");
- header("Content-Type: application/download");
-
-
- header("Content-Disposition: attachment;filename={$filename}");
- header("Content-Transfer-Encoding: binary");
- $items_data=array(
- '0'=>array('title'=>'test test test1'),
- '1'=>array('title'=>'test test test2'),
- '2'=>array('title'=>'test test test3')
- )
- print(chr(0xEF).chr(0xBB).chr(0xBF));
- echo array2csv($items_data);
-
- function array2csv(array &$array)
- {
- if (count($array) == 0) {
- return null;
- }
- ob_start();
- $df = fopen("php://output", 'w');
- fputcsv($df, array_keys(reset($array)));
- foreach ($array as $row) {
- fputcsv($df, $row);
- }
- fclose($df);
- return ob_get_clean();
- }
- ?>
还有一种办法就是使用Office,打开Microsoft wordlink_affiliate">Office 2010 Excel,数据-自文本,导入此csv格式文件,同样要求选择编码,这里选择UTF-8,打开后,发现乱码消除.
补:UTF-8是在互联网上使用最广的一种unicode编码的实现方式。UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度. |