プロが教える店舗&オフィスのセキュリティ対策術

こんにちわ!宜しくお願い致します。

現在、オープンソースのアンケートシステム「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として強制的に解釈させる方法など無いのでしょうか?その他何か良い方法があればお教え下さい。

以上、宜しくお願い致します。

A 回答 (1件)

よくあることですが


丸数字やローマ数字、(株)・(有)や波ダッシュ・全角チルダなどはトラブルの原因になります

丸数字は(数字)、ローマ数字はIとVとXをつかった組合せに
(株)・(有)はかっこ株・かっこ有に、波ダッシュは長音(ー)に
str_replace()で事前に変更してしまうのが手っ取り早いです

この回答への補足

自己解決しました。

下記のコードをそのまま使用すると、エラーになったり、文字化けが改善されませんが、コード中の「'」を「"」に置換して使用すれば出来ました。
http://memo.xight.org/2006-06-19-13

補足日時:2012/04/05 09:18
    • good
    • 0
この回答へのお礼

御回答有り難う御座います。

そういった方法しかやはり無いのでしょうか?

一応、下記のホームページのコードを使って、
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");

は上手く変換できています。

何か実装の仕方が悪いのでしょうか?

以上、宜しくお願い致します。

お礼日時:2012/04/02 10:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!