มีปัญหาเรื่องการออกรายงาน Excel ผ่าน Linux Server เป็นภาษาไทยค่ะ ซึ่งฐานข้อมูลยังเป็นการกำหนด Character Set แบบ TIS-620 อยู่ค่ะ เบื้องต้นลองใช้ iconv รวมทั้งกำหนด mysql_query("SET NAMES tis620") แล้วค่ะ
ลองทำตามกระทู้ของคุณ naskw ตามลิ้งค์นี้แล้ว ก็ยังเป็นปัญหาอยู่ คือพอเอาโค้ดขึ้นบน Server ภาษาก็จะอ่านไม่ออกเหมือนเดิม แต่พอเวลาเทสบนเครื่อง Localhost ก็ออกได้ตามปกติค่ะ
*อันนี้จะเป็นโค้ดไฟล์เทสค่ะ
Code (PHP)
<?php
header("Content-type: text/html; charset=tis-620");
/** Include PHPExcel */
require_once '../PHPexcel/Classes/PHPExcel.php';
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
//+ FONT SIZE
$objPHPExcel->getDefaultStyle()->getFont()->setSize(11);
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Hello')
->setCellValue('B1', 'ภาษาไทย')
->setCellValue('C1', ''.iconv('TIS-620','UTF-8','ภาษาไทยทดสอบ').'')
->setCellValue('E1', 'ทดสอบภาษาไทย');
$objPHPExcel->setActiveSheetIndex()->setCellValue('A4', 'ทดสอบ');
$objPHPExcel->setActiveSheetIndex()->setCellValue('B4', ''.iconv('TIS-620','UTF-8','ทดสอบ').'');
// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle('Demo01');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="01demo.xls"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
?>
ผลที่กำหนด head เป็น tis-620 ที่รันผ่านเครื่อง localhost ถ้าไม่ใช้ iconv ภาษาไทยจะไม่ออกค่ะ
ลองแล้วนะคะพอเอาขึ้น server ก็ยังอ่านไม่ออกอยู่ดีอ่ะค่ะ Code (PHP)
<?php
header("Content-type: text/html; charset=utf-8");
/** Include PHPExcel */
require_once '../PHPexcel/Classes/PHPExcel.php';
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
//+ FONT SIZE
$objPHPExcel->getDefaultStyle()->getFont()->setSize(11);
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Hello')
->setCellValue('B1', 'ภาษาไทย')
->setCellValue('C1','ทดสอบภาษาไทย')
->setCellValue('D1', 'ทดสอบภาษาไทย');
$objPHPExcel->setActiveSheetIndex()->setCellValue('A4', 'ทดสอบ');
$objPHPExcel->setActiveSheetIndex()->setCellValue('B4', 'ทดสอบภาษาไทย');
// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle('Demo01');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="01demo.xls"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
?>
หนูลองเข้า Notepad++ แล้ว convert to utf-8 without bom แล้วก็ยังเป็นเหมือนเดิมเลยค่ะ