При использовании всем известного PHPExcel для чтения файлов можно столкнуться с проблемой, когда в исходном xls-файле не указана кодировка и тогда PHPExcel не может ее корректно определить сам. В этом случае вместо русских слов можно увидеть что-то вроде этого: ïèòàòåëüíûé
Проблема заключается в том, что по-умолчанию PHPExcel использует кодировку CP1252 а не CP1251. Чтобы исправить такое положение дел, необходимо внести несколько небольших изменений в php-код.
Алгоритм действий для исправления кодировки в PHPExcel на русскую CP1251
1. Откройте файл PHPExcel/Reader/Excel5.php, в нем необходимо найти все строки, содержащие CP1252 и поменять на CP1251. На момент написания статьи используется версия PHPExcel 1.8.1. Получатся изменения в 3-х местах:
public function load($pFilename) ... ... // initialize $this->pos = 0; $this->codepage = 'CP1251'; // было CP1252 $this->formats = array(); ... ...
private function readSummaryInformation() ... ... // initialize code page (used to resolve string values) $codePage = 'CP1251'; // было CP1252 ... ...
private function readDocumentSummaryInformation() ... ... // initialize code page (used to resolve string values) $codePage = 'CP1251'; // было CP1252 ... ...
2. Аналогично нужно внести изменения в файл PHPExcel/Shared/CodePage.php
Сначала сделать изменения в строке:
public static function NumberToName($codePage = 1251) // было 1252
И еще в нем же добавить еще одну строку
case 65000: return 'UTF-7'; // Unicode (UTF-7) case 65001: return 'UTF-8'; // Unicode (UTF-8) default: // Добавлено return 'CP1251'; // Добавлено } throw new PHPExcel_Exception('Unknown codepage: ' . $codePage);
Я не нашел способа как обойтись без изменения этих файлов, поэтому и пришлось прибегнуть к такому способу исправления кракозябр для файлов, сохраненных без указания кодировки (вроде бы это файлы из 1С-ки). После этих исправлений кодировка по-умолчанию в PHPExcel-е будет CP1251. За информацию спасибо Блогу Павла Беляева
Комментарии к статье:
composer require --prefer-dist den2016/phpexcel - там учтены эти изменения
Добавить комментарий: