2017-01-27 14 views
0

Пожалуйста, у меня есть проблема в моем PHP-коде, я пытаюсь преобразовать весь лист документа excel в CSV, зная, что в этот документ включены французские символы, такие как «é, è, à ç», после выполнения кода PHP я получаю несколько CSV-документов, но с другими символами вместо французского, как «Ã © là ©, à © ..).Выход PHP Проблемы с символами utf-8

Я использую xampp (Apache) в качестве веб-сервера и я изменил несколько параметров, таких как" 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++; 
} 
?> 

Спасибо,

ответ

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?

+0

Спасибо, я нашел решение, добавив эту строку в мой код $ objWriter-> setUseBOM (true); –

1

Проблема, к сожалению, не в том, что не существует надежного способа кодирования Символы Unicode в CSV. Использование UTF-8 должно работать с большинством программного обеспечения, но, в частности, не работает, когда вы открываете этот CSV с Microsoft Excel, который просто предполагает кодировку по умолчанию (например, CP-1252), и все ваши символы, отличные от ascii, будут выглядеть как мусор ,

Теперь вы можете заставить его правильно интерпретировать ваш UTF-8, поместив в начале документа знак порядка юникодного байта, который в UTF-8 выражается как "\xEF\xBB\xBF".

Однако я обнаружил, что если вы затем измените и сохраните файл как CSV снова в Excel, это будет лишено и последующие попытки открыть файл приводят к мусору.

Альтернативным решением является скрытое использование латинского-1 с использованием utf8_decode (или CP-1252 с использованием одного из многобайтовых расширений/библиотек кодирования). Но это приведет к тому, что большинство символов Unicode будут выделены из нескольких европейских.

+0

Спасибо, я нашел решение, добавив эту строку в мой код $ objWriter-> setUseBOM (true); –