CoderNotes - заметки программиста

Публикации  »  PHP
Скидка 65% на Skillbox

Получите скидку 65% на любой курс программирования на популярной образовательной платформе Skillbox!

Подробнее
Бесплатный хостинг + SSL-сертификат

Зарегистрируйте домен и получите 2 месяца бесплатного хостинга и SSL-сертификат на 1 год в подарок

Подробнее

Проблема с кодировкой 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   Гость Помогло. Спасибо.
10.04.20   Андрей ты крут! Столько перелазил что-бы найти решение. Спасибо
02.06.21   Гость Боже мой, спасибо!!!!! три дня потратил на переконвертации внутри кода, а вот как просто
19.08.21   Гость Спасибо! Решение работает.
15.04.22   Гость и в 2022 году это тоже помогло!))) Спасибо!
30.06.22   Кайдор БОЖЕ ЧЕЛ ТЫ ГЕНИЙ!!! Привет из 2022 года)
06.12.22   Den2016 для тех, кто использует composer
composer require --prefer-dist den2016/phpexcel - там учтены эти изменения
12.01.23   Гость кыаю
12.04.23   Гость Уадн

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