PHP输出utf-8字符的问题

时间:2017-01-27 10:35:32

标签: php apache utf-8 xampp

请问我的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++;
}
?>

谢谢,

2 个答案:

答案 0 :(得分:2)

您应该检查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

另请参阅此相关问题:How can I output a UTF-8 CSV in PHP that Excel will read properly?

答案 1 :(得分:1)

遗憾的是,问题在于没有可靠的方法在CSV中编码Unicode字符。使用UTF-8应该适用于大多数软件,但是当您使用Microsoft Excel打开该CSV时,工作尤为明显,Microsoft Excel仅采用默认编码(例如CP-1252)和所有非ascii字符看起来像垃圾。

现在,您可以通过在文档的开头放置Unicode字节顺序标记来正确解释您的UTF-8,其中UTF-8表示为"\xEF\xBB\xBF"

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

另一种解决方案是使用utf8_decode(或CP-1252,使用其中一个多字节编码扩展/库)转换为Latin-1。但是,除了选择欧洲字符外,这将剥夺大多数Unicode字符。