簡體   English   中英

utf-8字符的PHP輸出問題

[英]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文件的字符編碼的文檔。 以下應該有用:

https://github.com/PHPOffice/PHPExcel/blob/develop/Documentation/markdown/Overview/10-Reading-and-Writing.md#reading-a-csv-file

https://github.com/PHPOffice/PHPExcel/blob/develop/Documentation/markdown/Overview/10-Reading-and-Writing.md#writing-utf-8-csv-files

https://github.com/PHPOffice/PHPExcel/blob/develop/Documentation/markdown/Overview/10-Reading-and-Writing.md#writing-utf-8-html-files

另請參見以下相關問題: 如何在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM