Use PHP CI force_download ($filename, $data) to download. csv file to resolve file name garbled, file content garbled. Did a long time finally know a good solution.
1. Loading auxiliary functions
$this->load->helper (' Download '); Download auxiliary function $this->load->helper (' string '); Character Encoding conversion auxiliary turn book
2.force_download ($filename, $data) through its code can know that $data must be a string, if not a string error. is an array, must be converted to a string, with the function implode can, the function usage See official website, more my project code is as follows.
Public function Download () {//Output Excel file Header//resolve ie,firework such as browser file name garbled problem $filename = ' split data. csv '; $newarray =array (); The result is a two-dimensional array if ($this->input->get ()!== false) {$conn = $this->getformdata ();} Output Excel column name information $head = array (' ID ', ' return money ', ' Money Back Amount (min) ', ' Adjust channel cost ', ' return time ', ' Import so time ', ' Channel name ', ' contract ID '); foreach ($head as $i = $v {//CSV Excel supports GBK encoding, be sure to convert otherwise garbled $head [$i] = UTF2GBK ($v);} $newarray []=implode (', ', $head); $sql = "SELECT * from Sinapay_boss_income where {$conn} ORDER by income_status ASC, boss_in come_id desc "; $query = $this->db->query ($sql);//Counter $cnt = 0;//every $limit line, refresh the output buffer, not too big or too small $limit = 8000;fo Reach ($query->result_array () as $row) {$cnt ++;if ($limit = = $cnt) {//Refresh output buffer to prevent problems caused by excessive data ob_flush (); flush (); $cnt = 0;} Read table Data $content = Array (), $content [] = $row [' boss_income_id ']; $content [] = $row [' Income_num ']; $content [] = $row [' Inco Me_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. After the test I found that the Internet Explorer file name is garbled, Firefox browser filename is garbled. So the following changes to the auxiliary function, the following add the background color of the code is I added.
if (! function_exists (' force_download ')) {function force_download ($filename = ', $data = ') {if ($filename = = "OR $data = = ") {return FALSE;} IE browser address file name is garbled $filename = UrlEncode ($filename); $filename = Str_replace ("+", "%20", $filename);//Try to determine if the filename includes a file extension.//We need it In order to set the MIME typeif (FALSE = = = Strpos ($filename, '. ')) {return FALSE;} Grab the file extension$x = Explode ('. ', $filename); $extension = end ($x);//Load the MIME types@include (APPPATH. ' Config /mimes '. EXT);//Set A default MIME if we can ' t find itif (! isset ($mimes [$extension])) {$mime = ' application/octet-stream ';} else{$mime = (Is_array ($mimes [$extension])? $mimes [$extension][0]: $mimes [$extension];} Generate the server Headersif (strstr ($_server[' http_user_agent '], "MSIE")) {header (' Content-type: "'. $mime. '"); Header (' content-disposition:attachment; Filename= '. $filename. '); Header (' expires:0 '); header (' Cache-control:must-revalidate, Post-cheCk=0, pre-check=0 '); Header ("Content-transfer-encoding:binary"); header (' Pragma:public '); Header ("Content-length:" . strlen ($data));} ElseIf (strstr ($_server[' http_user_agent '), "Firefox") {//fix Firefox filename garbled header (' Content-type: '. $mime. '); Header (' content-disposition:attachment; filename*= ' utf8\ ' \ '. $filename. Header (' expires:0 '), header (' Cache-control:must-revalidate, post-check=0, pre-check=0 '), Header (" Content-transfer-encoding:binary "), header (' Pragma:public '), Header (" Content-length: ". strlen ($data));} Else{header (' Content-type: '. $mime. '); Header (' content-disposition:attachment; Filename= '. $filename. '); Header ("Content-transfer-encoding:binary"), header (' expires:0 '), header (' Pragma:no-cache '), Header (" Content-length: ". strlen ($data));} Exit ($data);}}