【问题标题】:Debug iconv_strlen error - PHP 5.5调试 iconv_strlen 错误 - PHP 5.5
【发布时间】:2014-04-24 22:12:45
【问题描述】:

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

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

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

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

【问题讨论】:

  • 看起来问题出在 Patchwork 提供的 MBString 兼容性 shim 中。 IE。您的服务器未启用 MBString,并且 shim 中的某些内容无法按预期工作。知道什么在调用mb_strlen 函数会有所帮助。你能得到堆栈跟踪吗?
  • 问题已解决。谢谢布赖恩。通过重新安装mbstring解决了问题。 sudo yum --disablerepo="*" --enablerepo="remi*" install php-mbstring* sudo httpd -k restart
  • ^^ 你应该通过回答你自己的问题来解决这个问题。你能解释一下你是如何运行这个过程的吗?
  • @Gravy 我遇到了同样的问题,在这里更新 php-mbstring 解决了它。您应该发布您为解决问题所做的工作的答案!

标签: php laravel dompdf iconv mbstring


【解决方案1】:

如果您使用 wamp 或某些自定义堆栈,请记住 中的 php 可能正在使用自定义 php_something.ini 供 apache 使用,因此即使 GUI 显示mbstring on(未注释)在实际 php.ini 文件中(True故事)。

解决方案:- 只需导航到

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

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

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

【讨论】:

    【解决方案2】:

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

    通过重新安装 mbstring 解决了这个问题。

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

    【讨论】:

      【解决方案3】:

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

      latest release of dompdfCpdf 类 包含大约 30 次对 mb_strlen() 的调用,其中 $encoding 参数设置为 '8bit',这是一个 valid encoding for mb_strlen().

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

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

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

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

      安装mbstring PHP 模块会导致mb_strlen() 在本机执行, 所以不使用垫片,也不会发生错误。

      更新

      @rofavadeka 一种解决方案是创建一个 forkdompdf repo,并替换每次使用 '8bit' 使用不同的 8 位编码进行编码,由 mb_strlen()glibclibiconv

      我已经写了a script 来确定哪些编码是合适的。 这是脚本的输出 glibclibiconv。 合适的编码是:

      【讨论】:

      • 那么有没有办法改变'8bit'编码或解决这个问题?有同样的问题,但在共享主机上,很遗憾我不能简单地重新安装来解决这个问题!希望你能指出我正确的方向。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        在为我的数据库播种以进行测试时,我在 Hash:make() 中遇到了该错误。

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

        在 Windows 中,解决方法是:删除

        之前的分号
         extension=php_mbstring.dll
        

        【讨论】:

        • 你的意思是php.ini
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 2020-02-19
        • 1970-01-01
        • 2013-09-03
        • 2013-06-17
        • 2019-06-07
        • 1970-01-01
        相关资源
        最近更新 更多