如果你正在使用PHP Excel開發,那么你一定碰到過中文亂碼的問題。中文亂碼問題是因為Excel文件編碼和讀取編碼不匹配所致。比如你從數據庫中讀取的數據是UTF-8編碼,但是導出到Excel文件時,Excel默認的編碼是GBK編碼,這樣就會導致中文亂碼問題。那么,怎樣解決中文亂碼問題呢?下面我們將詳細介紹。
首先,解決中文亂碼問題的最好辦法就是判斷文本的編碼格式,然后在存儲和讀取時保持一致。比如我們從數據庫中讀取的數據是UTF-8編碼,那么在導出Excel時,我們需要將編碼格式設置為UTF-8。下面我們來看一下具體的代碼實現:
header('Content-Type: application/vnd.ms-excel;charset=utf-8');
header('Content-Disposition: attachment;filename="example.xlsx" ');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
上述代碼中,我們使用header函數來設置Excel的編碼格式為UTF-8,并指定Excel文件名為example.xlsx。然后使用PHPExcel_IOFactory::createWriter函數將PHPExcel對象寫入到Excel文件中。
如果你想將Excel文件中的數據讀取出來,保持編碼一致也是非常重要的。比如我們想將讀取的數據存儲到數據庫中,需要指定編碼格式為UTF-8,下面是具體的代碼實現:
$reader = PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $reader->load("example.xlsx");
$sheet = $objPHPExcel->getActiveSheet();
$rows = $sheet->getHighestRow();
for ($row = 2; $row<= $rows; $row++) {
$product_name = $sheet->getCellByColumnAndRow(0, $row)->getValue();
$price = $sheet->getCellByColumnAndRow(1, $row)->getValue();
$product_name = iconv("GBK", "UTF-8//IGNORE", $product_name);
$sql = "INSERT INTO products (product_name, price) VALUES ('$product_name', '$price')";
mysqli_query($conn, $sql);
}
mysqli_close($conn);
上述代碼中,我們使用PHPExcel_IOFactory::createReader函數讀取Excel文件內容,并獲取到最大行數。然后通過循環讀取每一行數據,使用iconv函數將讀取的數據從GBK編碼轉換成UTF-8編碼。最后將數據存儲到數據庫中。
當然,如果你只是想在Excel文件中顯示中文,而不需要將數據存儲到數據庫中,你也可以通過設置PHPExcel的編碼來解決中文亂碼問題,下面是具體的代碼:
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setTitle('example');
$objPHPExcel->getDefaultStyle()->getFont()->setName('微軟雅黑');
$objPHPExcel->getDefaultStyle()->getFont()->setSize(10);
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setTitle('example');
$objPHPExcel->getActiveSheet()->setCellValue('A1', '產品名稱');
$objPHPExcel->getActiveSheet()->setCellValue('B1', '價格');
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValueExplicit('A2', '中國', PHPExcel_Cell_DataType::TYPE_STRING);
$objPHPExcel->getActiveSheet()->setCellValue('B2', '10');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('example.xlsx');
上述代碼中,我們首先創建一個PHPExcel對象,并設置編碼為UTF-8。然后設置默認字體和字體大小,并在Excel文件中寫入數據。注意,在寫入數據時,我們使用PHPExcel_Cell_DataType::TYPE_STRING參數來將文本類型設置為字符串類型,這樣就可以正常顯示中文了。
綜上所述,解決PHP Excel中文亂碼問題的關鍵是保證編碼格式的一致性。通過以上方法,我們就可以輕松解決中文亂碼問題,讓開發更加順利。