PHP の GD 関数 imagettftext() はデフォルトの文字エンコーディングに注意する必要があります
著者:Eve Cole
更新時間:2009-06-07 15:15:31
私は最近、メンバー情報に基づいてテキスト付きの画像を自動的に生成する、パーソナライズされたフォーラムの署名に似た小さな機能を開発しています。画像の結合は imagecopy() や imagecopyresampled() などの関数を使用して行うことができますが、テキストを描画する場合には問題が発生します。テキスト テンプレートはテキスト ファイルに保存されます。プログラムはまずファイルを読み取り、その中の変数をデータに置き換えます。次に、imagettftext() 関数を使用して画像上に描画します。@_@ 残念ながら、描画された画像は文字化けします。 ...そこで、Google で関連する問題を検索したところ、imagettftext() 関数で渡される文字列は UTF-8 でエンコードする必要があるとほとんどの人が言っており、公式の PHP マニュアルにも「UTF-8 でエンコードされた文字列」と明記されていることがわかりました。 「直接渡せる」のですが、問題はテンプレートファイルのエンコードが元々UTF-8になっており、少々不可解です。困ったので、EmEditor で元のテンプレートファイルを開き、別のエンコードに変換して、GD が出力した文字化けしたコードと比較してみたところ、EUC-JP エンコードに変換すると文字化けしたコードと一致することが分かりました。 GD による出力...つまり、ここのサーバー上の GD のデフォルトのエンコーディングは EUC-JP であり、これは日本語エンコーディングです。 php.ini の設定を検索しましたが、関連するオプションが見つからなかったので、このデフォルトのエンコーディングはどこに設定されているのかという別の疑問が生じました。 PHP のコンパイル パラメータに非常に疑わしい「--enable-gd-jis-conv」パラメータがあることを発見したのは、Si Wen の弟 Niu でした。Google は、多くの文字化けの問題がこのコンパイル パラメータに関連していることを発見しました。パラメータの説明 「GD: JIS マップされた日本語フォントのサポートを有効にする」です。これは、GD が日本語でエンコードされたフォントをサポートすることを意味します (くそー、なぜ中国語でエンコードされたフォントをサポートするコンパイル オプションがないのですか...PHP も区別しますか) nationality = =b)、率直に言えば、これを有効にします。このオプションが有効な場合、GD は、TTF フォント ライブラリ内の 127 を超える部分 (つまり、標準のラテン語フォント ライブラリに属さない部分) を次のようにマッピングします。日本語 JIS 順に変換すると、中国語フォントのマッピングに使用すると当然文字化けします。面倒な作業はせずに、このオプションを削除して再コンパイルすると、問題は解決します。このオプションを削除すると、imagettftext() のデフォルトのエンコーディングが UTF-8 になり、中国語が正常に表示されるようになります~