Ответ 1
Проблема решена. Спасибо Брайансу.
Это было решено путем повторной установки mbstring.
sudo yum --disablerepo="*" --enablerepo="remi*"
install php-mbstring*
sudo httpd -k restart
Я пытаюсь экспортировать документ в 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"/>
Если вам нужна дополнительная информация, которая поможет мне в отладке, пожалуйста, спросите в комментариях.
Проблема решена. Спасибо Брайансу.
Это было решено путем повторной установки mbstring.
sudo yum --disablerepo="*" --enablerepo="remi*"
install php-mbstring*
sudo httpd -k restart
Решение 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()
изначально,
поэтому прокладка не используется и ошибка не возникает.
@rofavadeka Одним из решений является создание
fork
dompdf repo и заменить каждое использование
'8bit'
с другой 8-разрядной кодировкой, которая поддерживается
mb_strlen()
, glibc
и libiconv
.
Я написал a script, чтобы определить, какие кодировки подходят.
Здесь вывод script для
glibc
и
libiconv
.
Подходящими кодировками являются:
Я получал эту ошибку в Hash:make()
при посеве моей БД для тестирования.
Включение php_mbstring
в php-cli.ini
вызвало его.
В Windows решение: удалить точку с запятой до
extension=php_mbstring.dll
Если вы используете WHM, вы можете использовать EasyApache для перестройки. После того, как вы получите параметры модулей после выбора своей версии PHP, выберите кнопку "Исчерпывающий список опций". Затем ctrl + f "mbstring", и он должен появиться. Отметьте флажок и перестройте. Он должен работать.
Если вы используете 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
.
Это заставило меня долго тянуть волосы, подумал, что это может помочь кому-то.