PHP 输出 utf-8 字符的问题



请问我的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 'ClassesPHPExcelIOFactory.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 应该适用于大多数软件,但值得注意的是,当您使用 Microsoft Excel 打开该 CSV 时不起作用,它只假定默认编码(例如。CP-1252),所有非ASCII字符看起来都像垃圾。

现在,您可以通过将 Unicode 字节顺序标记放在文档的开头来让它正确解释您的 UTF-8,在 UTF-8 中表示为 "xEFxBBxBF" .

但是,我发现如果您随后在Excel中再次修改并将文件另存为CSV,则会将其剥离,随后尝试打开文件会导致垃圾。

另一种解决方案是使用 utf8_decode 隐蔽到 Latin-1(或使用多字节编码扩展/库之一隐蔽到 CP-1252)。 但这将去除除一系列欧洲字符之外的大多数 Unicode 字符。

最新更新