Ошибка Debug iconv_strlen - PHP 5.5

Я пытаюсь экспортировать документ в PDF, используя Laravel и DomPDF. Это работает на моем Mac, но не на промежуточном или живом сервере. Ошибка:

Я понятия не имею, что это значит, и не может найти никаких решений.

iconv_strlen(): Wrong charset, conversion from 8bit//IGNORE 'to UCS-4LE' is not allowed

open: /srv/www/html/vendor/patchwork/utf8/class/Patchwork/PHP/Shim/Mbstring.php

        return true;
    }

    static function mb_strlen($s, $encoding = INF)
    {
        INF === $encoding && $encoding = self::$internal_encoding;
        return iconv_strlen($s, $encoding . '//IGNORE');
    }

Я попытался добавить следующее в .htaccess

AddDefaultCharset UTF-8

Я попытался добавить следующее в начало представления, которое я пытаюсь создать pdf для:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

Если вам нужна дополнительная информация, которая поможет мне в отладке, пожалуйста, спросите в комментариях.

Ответ 1

Проблема решена. Спасибо Брайансу.

Это было решено путем повторной установки mbstring.

sudo yum --disablerepo="*" --enablerepo="remi*"
install php-mbstring*
sudo httpd -k restart

Ответ 2

Решение BrianS действительно решает проблему, но я подумал, что было бы интересно объяснить, что вызвало исходную проблему.

В последней версии dompdf, Cpdf class содержит около 30 вызовов mb_strlen() с параметром $encoding, установленным на '8bit', который является допустимая кодировка для mb_strlen().

Laravel composer.json требует patchwork/utf8. Он обеспечивает mb_strlen() прокладку который вызывает iconv_strlen().

Обычно PHP использует glibc или libiconv для своего iconv. Для обеих библиотек список поддерживаемых кодировок может быть , используя iconv --list.

Ни одна из этих библиотек не поддерживает кодировку под названием '8bit', поэтому iconv_strlen() эта ошибка:

Wrong charset, conversion from '8bit//IGNORE' to 'UCS-4LE' is not allowed

Установка модуля mbstring PHP вызывает выполнение mb_strlen() изначально, поэтому прокладка не используется и ошибка не возникает.

Update

@rofavadeka Одним из решений является создание fork dompdf repo и заменить каждое использование '8bit' с другой 8-разрядной кодировкой, которая поддерживается mb_strlen(), glibc и libiconv.

Я написал a script, чтобы определить, какие кодировки подходят. Здесь вывод script для glibc и libiconv. Подходящими кодировками являются:

Ответ 3

Я получал эту ошибку в Hash:make() при посеве моей БД для тестирования.

Включение php_mbstring в php-cli.ini вызвало его.

В Windows решение: удалить точку с запятой до

 extension=php_mbstring.dll

Ответ 4

Если вы используете WHM, вы можете использовать EasyApache для перестройки. После того, как вы получите параметры модулей после выбора своей версии PHP, выберите кнопку "Исчерпывающий список опций". Затем ctrl + f "mbstring", и он должен появиться. Отметьте флажок и перестройте. Он должен работать.

Ответ 5

Если вы используете wamp или какой-либо пользовательский стек, помните, что php в wamp может использовать пользовательский php_something.ini для использования apache, из-за которого даже если заголовок wamp В графическом интерфейсе показано, что mbstring на (без комментирования) все еще тихо, что тот же строка отключена/отключена/ выключена) внутри фактического файла php.ini (True Story).

Решение: - Просто перейдите к

wamp dir > bin > php > phpx.x.x >

В этом каталоге вы найдете несколько файлов .ini, названных несколько иначе, Mine использовал php_uwamp.ini для стека, но для CLI, php использовался соседний файл с именем php.ini.

Это заставило меня долго тянуть волосы, подумал, что это может помочь кому-то.