[英]PHP output encoding issues with UTF-8 strings from MySQL databases
[英]PHP output Issues with utf-8 characters
請在我的PHP代碼中遇到問題,我嘗試將excel文檔的所有工作表都轉換為CSV,在執行PHP代碼后,我知道該文檔包含法語字符(例如“é,è,àç”),但我獲得了一些CSV文檔,但是與其他字符代替法語,例如“élé,é..)。
我使用xampp(Apache)作為Web服務器,我更改了幾個參數,例如“ default_charset =“ UTF-8,AddDefaultCharset UTF-8 ..”。
有我的代碼:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta charset="utf-8">
<?php
header('content-type: text/html; charset: utf-8');
require_once 'Classes\PHPExcel\IOFactory.php';
$inFile = 'parc.xlsx';
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $objReader->load($inFile);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');
$index = 0;
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
$objPHPExcel->setActiveSheetIndex($index);
$outFile = str_replace(array("-"," "), "_", $worksheet->getTitle()) .".csv";
$objWriter->setSheetIndex($index);
$objWriter->save($outFile);
$index++;
}
?>
謝謝,
您應該檢查xlsx文件的字符編碼。 如果文件是在Windows上創建的,則它可能具有Windows-1252(CP1252)字符編碼。 如果是這樣,則需要將其轉換為UTF-8。 請參閱有關如何處理excel文件的字符編碼的文檔。 以下應該有用:
另請參見以下相關問題: 如何在PHP中輸出Excel可以正確讀取的UTF-8 CSV?
不幸的是,問題在於沒有可靠的方式在CSV中編碼Unicode字符。 使用UTF-8應該與大多數軟件工作,但值得注意的是,當你打開根本不是那么CSV與Microsoft Excel,這只是假定的默認編碼(如CP-1252)和所有非ASCII字符看起來像垃圾。
現在,您可以通過將Unicode字節順序標記放在文檔的開頭來正確地解釋您的UTF-8,該標記在UTF-8中表示為"\\xEF\\xBB\\xBF"
。
但是,我發現如果您隨后在Excel中再次將文件修改並另存為CSV,則會刪除該文件,並且隨后嘗試打開文件會導致垃圾回收。
一種替代解決方案是使用utf8_decode隱蔽到Latin-1(或使用多字節編碼擴展/庫之一隱蔽到CP-1252)。 但是,這將除去大多數Unicode字符(除精選的歐洲字符之外)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.