10

Laravel & DomPDF を使用してドキュメントを PDF にエクスポートしようとしています。これは私の Mac では機能しますが、ステージング サーバーやライブ サーバーでは機能しません。次のようなエラー:

これが何を意味するのかわからず、解決策が見つかりません。

iconv_strlen(): Wrong charset, conversion from8bit//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

5 に答える 5

9

問題が解決しました。ありがとうブライアン。

これは、mbstring を再インストールすることで解決されました。

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

BrianS のソリューションは確かに問題を解決しますが、元の問題の原因を説明するのは興味深いと思いました。

dompdfの最新リリースでは、クラスには、パラメータが に設定されたCpdf約 30 の呼び出しが含まれています。これは、 の 有効なエンコーディングですmb_strlen()$encoding'8bit'mb_strlen()

Laravel のcomposer.json requires patchwork/utf8. mb_strlen()を呼び出すシムを提供しますiconv_strlen()

PHP は通常、そのモジュールにglibcまたはを使用します。どちらのライブラリでも、サポートされているエンコーディングのリストは を 使用して表示できます。libiconviconviconv --list

これらのライブラリはどちらも というエンコーディングをサポートしてい'8bit'ないためiconv_strlen() 、エラーがスローされます。

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

mbstringPHP モジュールをインストールするmb_strlen()とネイティブに実行されるため、shim は使用されず、エラーは発生しません。

アップデート

@rofavadeka 1 つの解決策は 、 dompdf レポジトリのフォークを作成し、エンコーディングのすべての使用を 、およびでサポートされている別の 8 ビット エンコーディングに 置き換えることです。'8bit'mb_strlen()glibclibiconv

どのエンコーディングが適しているかを判断するスクリプトを作成しました。glibcと のスクリプトの出力を次に示します libiconv。適切なエンコーディングは次のとおりです。

于 2015-01-20T17:38:00.687 に答える
3

Hash:make()テスト用に DB をシードしているときに、そのエラーが発生していました。

で有効php_mbstringにしたphp-cli.iniことが原因でした。

Windows での解決策は次のとおりです。前にセミコロンを削除します

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

WHM を使用している場合は、EasyApache を使用して再構築できます。PHP のバージョンを選択した後にモジュール オプションを取得したら、[Exhaustive Options List] ボタンを選択します。次に ctrl+f "mbstring" と表示されます。チェックボックスをマークして再構築します。それはうまくいくはずです。

于 2015-02-07T04:00:23.783 に答える