繁体   English   中英

调试iconv_strlen错误 - PHP 5.5

[英]Debug iconv_strlen error - PHP 5.5

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

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

iconv_strlen(): Wrong charset, conversion from UCS-4LE' is not allowed iconv_strlen(): Wrong charset, conversion from 8位// IGNORE' iconv_strlen(): Wrong charset, conversion fromUCS-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"/>

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

问题解决了。 谢谢BrianS。

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

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

BrianS的解决方案确实解决了这个问题,但我认为解释造成原始问题的原因很有意思。

最新版本CpdfCpdf类包含对mb_strlen()大约30个调用,其中$encoding参数设置为'8bit' ,这是mb_strlen()有效编码

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

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

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

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

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

更新

@rofavadeka一种解决方案是创建一个的的DOMPDF回购,并取代在每次使用的'8bit'与由支持不同的8位的编码方式进行编码mb_strlen() glibclibiconv

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

我在Hash:make()遇到了这个错误Hash:make()在播放我的数据库进行测试时。

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

在Windows中,解决方案是:之前删除分号

 extension=php_mbstring.dll

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

如果你在wamp或一些自定义堆栈,请记住你的中的php可能正在使用自定义php_something.ini进行apache使用,因此即使 GUI显示mbstring打开 (取消注释)仍然安静可能在实际的php.ini文件( True Story )中注释掉(禁用/ 关闭 )相同的行。

解决方案 : - 导航到

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

在这个目录中你会发现各种命名略有不同的.ini文件,我正在使用php_uwamp.ini作为堆栈但是对于CLIphp正在使用名为php.ini的相邻文件。

这让我长时间拉毛,以为它可能对某人有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM