【问题标题】:PHP output Issues with utf-8 charactersutf-8 字符的 PHP 输出问题
【发布时间】:2017-01-27 10:35:32
【问题描述】:

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

谢谢,

【问题讨论】:

    标签: php apache utf-8 xampp


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我通过将这一行添加到我的代码中找到了解决方案 $objWriter->setUseBOM(true);
    • 谢谢你拯救我的一天!
    【解决方案2】:

    不幸的是,问题在于没有可靠的方法在 CSV 中编码 Unicode 字符。使用 UTF-8 应该适用于大多数软件,但值得注意的是,当您使用 Microsoft Excel 打开该 CSV 时,not 工作,它只是假定默认编码(例如 CP-1252)和所有非 ascii字符看起来像垃圾。

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

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

    另一种解决方案是使用 utf8_decode 转换为 Latin-1(或转换为 CP-1252,使用多字节编码扩展/库之一)。但这会去除除欧洲字符之外的大多数 Unicode 字符。

    【讨论】:

    • 谢谢,我通过将这一行添加到我的代码中找到了解决方案 $objWriter->setUseBOM(true);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多