ホームページ >バックエンド開発 >PHPチュートリアル >php CI Force_download($filename, $data) を使用して .csv ファイルをダウンロードし、ファイル名とファイルの内容が文字化けする問題を解決します。

php CI Force_download($filename, $data) を使用して .csv ファイルをダウンロードし、ファイル名とファイルの内容が文字化けする問題を解決します。

WBOY
WBOYオリジナル
2016-06-23 13:52:401138ブラウズ

php CI Force_download($filename, $data) を使用して .csv ファイルをダウンロードし、ファイル名とファイルの内容が文字化けする問題を解決します。長い間これを行った後、ついに良い解決策を見つけました。

1. 補助関数のロード

$this->load->helper('download');  //下载辅助函数$this->load->helper('string');    //字符编码转换辅助翻书

2. Force_download($filename, $data) $data が文字列でなければならないことがわかります。文字列でない場合は、エラーが発生します。これは配列なので、implode関数を使用する必要があります。この関数の使用方法については、私のプロジェクトのコードは次のとおりです。

public function download() {	      // 输出Excel文件头	     //解决IE,firework等浏览器文件名乱码问题		$filename = '已拆回款数据.csv';		$newarray=array();该结果是一个二维数组		if ($this->input->get () !== false) {			$conn = $this->getformdata ();		}		// 输出Excel列名信息		$head = array (				'ID',				'回款号',				'回款金额(分)',				'调整渠道成本',				'回款时间',				'导入SO时间',				'渠道名称',				'合同ID' 		);		foreach ( $head as $i => $v ) {			// CSV的Excel支持GBK编码,一定要转换,否则乱码			 $head [$i] = utf2gbk($v);		}		$newarray[]=implode(',',$head);		$sql = "select * from sinapay_boss_income where {$conn} order by income_status asc, boss_income_id desc";		$query = $this->db->query ( $sql );		// 计数器		$cnt = 0;		// 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小		$limit = 8000;		foreach ( $query->result_array () as $row ) {			$cnt ++;			if ($limit == $cnt) { // 刷新一下输出buffer,防止由于数据过多造成问题				ob_flush ();				flush ();				$cnt = 0;			}			// 读取表数据				$content = array ();				$content [] =$row ['boss_income_id'];				$content [] =$row ['income_num'];				$content [] =$row ['income_amount'];				$content [] =$row ['modified_cost'];				$content [] =$row ['income_date'];				$content [] =$row ['write_so_month'];				$content [] =utf2gbk($row ['channel_name']);				$content [] =utf2gbk($row ['income_contract_id']);			$newarray[]=implode(',',$content);		}		$newarray=implode("\n",$newarray);		force_download($filename, $newarray); 	}} 

3. 試してみたところ、IE ブラウザのファイル名が文字化けしており、Firefox ブラウザのファイル名も文字化けしていました。そこで、補助関数に次のような変更を加えました。以下の背景色を追加するコードは私が追加しました。

れーい



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。