调试iconv_strlen错误 - PHP 5.5

时间:2014-03-18 22:54:23

标签: php laravel dompdf iconv mbstring

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

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

iconv_strlen(): Wrong charset, conversion from 8位// IGNORE'到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 个答案:

答案 0 :(得分:9)

问题解决了。谢谢BrianS。

这是通过重新安装mbstring解决的。

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

答案 1 :(得分:4)

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

latest release of dompdf中, Cpdf课程。valid encoding for mb_strlen() 包含mb_strlen() $encoding参数设置为'8bit'的大约30个来电,即{。}} composer.json

Laravel的patchwork/utf8 需要iconv。它提供mb_strlen()垫片 它调用iconv_strlen()

PHP通常会为displayed模块使用glibclibiconv。 对于这两个库,支持的编码列表可以是 fork使用iconv --list

这两个库都不支持名为'8bit'的编码,这就是为什么iconv_strlen() 抛出那个错误:

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

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

更新

@rofavadeka一个解决方案是创建一个 dompdf a script回购,并取代每次使用 '8bit'编码使用不同的8位编码 mb_strlen()glibclibiconv

我写了glibc来确定哪种编码是合适的。 这是脚本的输出 libiconvcp850。 合适的编码是:

答案 2 :(得分:3)

在播放我的数据库进行测试期间,我在Hash:make()中收到了该错误。

php_mbstring中启用php-cli.ini会导致它。

在Windows中,解决方案是:在

之前删除分号
 extension=php_mbstring.dll

答案 3 :(得分:0)

如果您使用WHM,则可以使用EasyApache进行重建。在选择PHP版本后获得模块选项后,选择&#34;穷举选项列表&#34;按钮。然后按ctrl + f&#34; mbstring&#34;它应该出现。选中复选框并重建。它应该工作。