Публикации
Публикации  »  PHP

Проблема с кодировкой PHPExcel

При использовании всем известного 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. За информацию спасибо Блогу Павла Беляева

 

Категория: PHP

Комментарии к статье:

11.09.17   Гость Помогло. Спасибо.

Добавить комментарий: