10

我正在尝试使用 Laravel 和 DomPDF 将文档导出为 PDF。这适用于我的 Mac,但不适用于登台或实时服务器。错误如下:

我不知道这意味着什么,也找不到任何解决方案。

iconv_strlen(): Wrong charset, conversion from8位//忽略'到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"/>

如果您需要任何进一步的信息来帮助我进行调试,请在评论中提问。

4

5 回答 5

9

问题解决了。谢谢布赖恩。

这已通过重新安装 mbstring 解决。

sudo yum --disablerepo="*" --enablerepo="remi*"
install php-mbstring*
sudo httpd -k restart
于 2015-01-16T14:56:41.773 回答
4

BrianS 的解决方案确实解决了这个问题,但我认为解释导致原始问题的原因会很有趣。

最新版本的 dompdfCpdf该类包含大约 30 次调用,mb_strlen()参数$encoding设置为'8bit',这是 .mb_strlen()

Laravel 的composer.json 要求patchwork/utf8。它提供mb_strlen()调用iconv_strlen().

PHP 通常使用其中一个glibclibiconv作为其iconv模块。对于这两个库,支持的编码列表可以 使用iconv --list.

这些库都不支持名为 的编码'8bit',这就是iconv_strlen() 引发该错误的原因:

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

安装mbstringPHP 模块会导致mb_strlen()本机执行,因此不使用 shim 并且不会发生错误。

更新

@rofavadeka 一种解决方案是创建一个 dompdf 存储库的 分支并将 每次使用的 编码 替换为,和.'8bit'mb_strlen()glibclibiconv

我编写了一个脚本来确定哪些编码是合适的。glibc这是和 的脚本的输出 libiconv。合适的编码是:

于 2015-01-20T17:38:00.687 回答
3

I was getting that error in Hash:make() during seeding my DB for testing.

Enabling php_mbstring in php-cli.ini caused it.

In Windows the solution is: remove the semicolon before

 extension=php_mbstring.dll
于 2015-01-30T05:31:48.127 回答
0

如果您使用 WHM,那么您可以使用 EasyApache 进行重建。选择您的 PHP 版本后获得模块选项后,选择“详尽的选项列表”按钮。然后 ctrl+f "mbstring" 它应该会出现。标记复选框并重建。它应该工作。

于 2015-02-07T04:00:23.783 回答
0

如果您在 wamp 或某个自定义堆栈上,请记住,php您的中的可能正在使用自定义php_something.ini的 apache 使用,因此即使 GUI 显示处于打开状态mbstring(未注释),同一行仍然可能很安静在实际文件(真实故事)中被注释掉(禁用/关闭)。php.ini

解决方案:- 只需导航到

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

在此目录中,您会发现各种.ini名称略有不同的文件,Minephp_uwamp.ini用于堆栈,但CLI, php使用名为php.ini.

这让我长时间安静地拉头发,认为这可能会对某人有所帮助。

于 2015-08-16T12:38:29.080 回答