繁体   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