- 締切済み
UTC-8→SJISで文字化け
こんにちわ!宜しくお願い致します。 現在、オープンソースのアンケートシステム「limesurvey」におきまして、文字化けが起きており困っております。 LimeSurveyバージョン 1.90+ Build 9046 ほとんどのところは、きちんと日本語表示されるのですが、グラフ内(pchart)の文字が文字化けします。 いろいろネットで調べて、imagettftextが原因と分かりました。 「JIS-mapped Japanese Font Support」の設定値がTRUEの場合、GDライブラリは渡された文字列をUTF-8ではなく、Shift_JISとして解釈するということが分かり、mb_convert_encoding関数であらかじめShift_JISに文字コード変換してから、imagettftext関数に渡したところ基本的には、文字化けが解消しました。 以下が、そのコードです。 $Value2 = mb_convert_encoding($Value2,"SJIS ","UTF-8"); しかしながら、「(1)(2)(3)」(←まる1、まる2、まる3)などの機種依存文字がどうしても「?」に変換されてしまいます。 Shift_JISには、「(1)(2)(3)」などの機種依存文字が無いので仕方がないのですが、何とか良い方法が無いでしょうか? ちなみにネットで調べたところ、「SJIS」ではなくて、「SJIS-win」で変換すれば文字化けが起こらないと分かりましたが、今度は、imagettftextでエラーが出てしまいます。 下記のコードはエラーになります。 $Value2 = mb_convert_encoding($Value2,"SJIS-win ","UTF-8"); 「JIS-mapped Japanese Font Support」の設定値がTRUEの場合でも、GDライブラリは渡された文字列をUTF-8として強制的に解釈させる方法など無いのでしょうか?その他何か良い方法があればお教え下さい。 以上、宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
よくあることですが 丸数字やローマ数字、(株)・(有)や波ダッシュ・全角チルダなどはトラブルの原因になります 丸数字は(数字)、ローマ数字はIとVとXをつかった組合せに (株)・(有)はかっこ株・かっこ有に、波ダッシュは長音(ー)に str_replace()で事前に変更してしまうのが手っ取り早いです
お礼
御回答有り難う御座います。 そういった方法しかやはり無いのでしょうか? 一応、下記のホームページのコードを使って、 http://memo.xight.org/2006-06-19-13 $Value2 = replaceText($Value2); $Value2 = mb_convert_encoding($Value2,"SJIS-win ","UTF-8"); と実装しましたが、うまく変換できません。 ちなみに文字列に、(1)(←まる1)が含まれているとして、 $Value2 = mb_ereg_replace('\xE2\x91\xA0','(1)',$Value2); $Value2 = mb_convert_encoding($Value2,"SJIS-win ","UTF-8"); は上手く変換できています。 何か実装の仕方が悪いのでしょうか? 以上、宜しくお願い致します。
補足
自己解決しました。 下記のコードをそのまま使用すると、エラーになったり、文字化けが改善されませんが、コード中の「'」を「"」に置換して使用すれば出来ました。 http://memo.xight.org/2006-06-19-13