メイン
   XOOPS2モジュール
     myAlbum-Pでの奇妙な(?)文字化け

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
xnoopy
投稿日時: 2005/6/23 16:40
常連
登録日: 2004/10/9
居住地:
投稿: 58
myAlbum-Pでの奇妙な(?)文字化け

myAlbum-Pを使用していて奇妙な(?)文字化けに遭遇しました。すでに解決はできましたが、同じようなトラブルで困っている方がもしいらっしゃれば、参考までに。

WindowsXP ProあるいはWindows Server 2003でApache2.0.54+PHP4.3.11+MySQL4.0.24上にXOOPS2.0.10JPをインストールし、myAlbum-Pのバージョンは2.84です。php.iniの設定は以下の時に文字化けが発生しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
output_buffering = On
output_handler =mb_output_handler
default_charset = "EUC-JP"
extension=php_mbstring.dll有効
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = auto
mbstring.substitute_character = none

この環境下で、myAlbum-Pで画像を登録する際に、「タイトル」あるいは「説明」の最初の文字が「発」「脳」の場合に文字化けが発生します。これらの文字が途中にある場合は文字化けは起きません。また、カテゴリーにはこれらの文字が1文字目であっても、正常に登録と表示ができます。phpMyAdminでタイトル」あるいは「説明」に直接書き込む場合には、「発」「脳」から始まる日本語でも正常に表示されます。 とりあえず気が付いたのは「発」「脳」から始まる日本語だけで、他の漢字でも起きるかも知れません。:-?

文字化けは、mbstring.http_output = EUC-JPにすれば起きませんので、おまえの設定が悪いからだと言われればそれまでなのですが、なぜこんな奇妙な文字化けが生じるのでしょうか?Shift_JISの場合に良く知られている、2バイト目が5Cとなる文字でのトラブルとは性質が違うようですが、後学のためにこの問題の原因がお分かりの方は教えて頂けませんか?

takafuumi
投稿日時: 2005/6/23 21:41
半人前
登録日: 2005/4/16
居住地:
投稿: 32
Re: myAlbum-Pでの奇妙な(?)文字化け

xnoopyさんこんにちは。
私も文字化けに気づいたので便乗させてください。

サーバ環境は違うのですが同じバージョンのxoopsとmyalbum-Pで管理メニューからの編集以外で文字化けが発生します。私のトコロでは挙げられている2文字に加えて大・福・東・駐・白・赤・青・緑も化けるようです。
mylinkから統合されたイメージマネージャを使って投稿すると文字化け、同じ文言を管理者メニューの画像管理から送ると化けませんでした。myalbum-Pの「投稿」からは化けます。
挙動と6/16に投稿した画像から発生しているので2.0.10からかも?と思っております。それ以前は直前の投稿が6/8でしかも1バイト文字から始まっているものばかりなのであまり当てにはなりませんが。

対策としてあげられているmbstring.http_output = EUC-JPを設定してみましたが、私のトコロでは変化無しです。他のパラメータとも関連してるのかも。

xnoopy
投稿日時: 2005/6/24 0:50
常連
登録日: 2004/10/9
居住地:
投稿: 58
Re: myAlbum-Pでの奇妙な(?)文字化け
takafuumiさん、情報ありがとうございます。
ご指摘頂いた大・福・東・駐・白・赤・青・緑について確認してみたところ、こちらの環境では、「福」のみ文字化けしました。
引用:
mylinkから統合されたイメージマネージャを使って投稿すると文字化け、同じ文言を管理者メニューの画像管理から送ると化けませんでした。myalbum-Pの「投稿」からは化けます。
確かに、myAlbum-Pの「投稿」からは化けますが、管理者メニューの「画像管理」から「タイトル」や「説明」を編集した場合は化けませんね。
引用:
挙動と6/16に投稿した画像から発生しているので2.0.10からかも?と思っております。それ以前は直前の投稿が6/8でしかも1バイト文字から始まっているものばかりなのであまり当てにはなりませんが。

文字化けは直前の投稿の有無や1バイト文字かどうかには関係なく発生します。XOOPS2.0.9.2でも同様の問題が発生することを確認しましたので、XOOPSのバージョンの問題ではなく、サーバのmbstringの設定が絡んだmyAlbum-P側の問題でしょうか? :-?
GIJOEさんのpiCalやxhnewbbを含む他の(自分が使用している)モジュールでは同様の文字化けは発生しないようです。

xnoopy
投稿日時: 2005/6/24 8:49
常連
登録日: 2004/10/9
居住地:
投稿: 58
Re: myAlbum-Pでの奇妙な(?)文字化け

追加です。

のぶのぶさんのBBSで見かけた投稿に書かれている現象が似ているように思えたので試してみたところ、「菱」の文字も、「タイトル」あるいは「説明」の1文字目に入っている場合は文字化けしました。さらに「文」も化けます。

「脳」「発」「福」「菱」「文」が最初に来る文字列を投稿すると、「タイトル」に入れた場合は常にタイトルには何も表示されず、「説明」に入れた場合は、問題の漢字1文字のみでは「\0」1文字のみ、問題の漢字に他の文字が続く場合は、「\0」に続けて「\0」あるいは文字化けした文字が表示されます。問題の漢字に半角英数字が続く場合は、「\0」に続いて半角英数字は(コード変換が関係しないので当然かもしれませんが)そのまま正しく表示されます。

xnoopy
投稿日時: 2005/6/26 16:38
常連
登録日: 2004/10/9
居住地:
投稿: 58
Re: myAlbum-Pでの奇妙な(?)文字化け
フォーラムを検索していたら、同様な投稿が既にありました。
my-albumP2.84で文字化け
このトピックでhoihoさんの書いておられる、
引用:
現在まで文字化けの発生を確認したのは
"両","稚","東","冷","登","別","二"(漢数字の2),"恍"
です。
(中略)
こちらの環境ではmyAlubum-P以外のモジュールでは現在のところ文字化けの発生はありません。
サーバーはFreeBSD 4.10+Apache/1.3.33、
PHPのバージョンは4.3.10です。
なお、mbstringの設定はPHP.iniで

mbstring.language Japanese
mbstring.encoding_translation On
mbstring.http_input auto
mbstring.http_output pass
mbstring.internal_encoding EUC-JP
mbstring.detect_order auto
mbstring.substitute_character none

としてあります。
mbstring.http_outputについてはEUC-JPに変更しても症状は改善されませんでした。

の中で挙げられている"両","稚","東","冷","登","別","二"(漢数字の2),"恍"について確認してみましたが、私のところでは、「両」のみ常に「ξ」に文字化けしました。php.iniに関しては、mbstring.encoding_translationがOnかOffかには無関係で、mbstring.http_output=passで常に発生し、mbstring.http_output=EUC-JPでは発生しなくなる点が異なります。フォームに入力を行うブラウザには依存しないようです(WindowsとMac上のIE, FireFox, Safariのみで確認)。

okuhiki
投稿日時: 2005/6/26 18:29
長老
登録日: 2004/1/24
居住地: Sanin
投稿: 516
Re: myAlbum-Pでの奇妙な(?)文字化け

\modules\myalbum\language\japanese\myalbum_constants.php Line 42

1
return mb_convert_encoding( $text , mb_internal_encoding() , "EUC-JP" ) ;

文字コードをEUC-JPとして認識していない(認識出来るだけの文字量が無い)場合に起ってますね。
とりあえずですが、EUC-JP決め打ちにすると、Okみたいです。
他で問題が発生するかまでは、確認していません。あしからず。

post時に文字コード判別用の値も送信して、title文字列の先頭にくっつけて、この関数を通過後に取り除くでしょうか?
フォーム側で、

1
<input type='hidden' name='charset' value='美くしいcharset|' />

\modules\myalbum\language\japanese\myalbum_constants.php側で

1
2
3
4
$text=$_POST['charset'].$text;
$text= mb_convert_encoding( $text , mb_internal_encoding() , mb_detect_order() ) ;
$text=preg_replace("/.*charset\|/","",$text);
return $text ;

もっと良い対策も有りそうですが。
いきなり、$_POST使ってますから、このままでは、アブナイのかも?きちんと'charset'の内容が'charset|'で終了していれば、消えるはずですから、チェックを入れた方が良さそうですね。

GIJOE
投稿日時: 2005/6/29 4:41
長老
登録日: 2003/4/3
居住地:
投稿: 2137
Re: myAlbum-Pでの奇妙な(?)文字化け

xnoopyさん、こんにちは。

引用:
この環境下で、myAlbum-Pで画像を登録する際に、「タイトル」あるいは「説明」の最初の文字が「発」「脳」の場合に文字化けが発生します。

okuhikiさんも書いてらっしゃいますが、エンコーディングが勘違いされているからじゃないでしょうか?

今確認したら、PHP4.3.11ですね。

これ、mbstringのエンコーディング認識にバグがあるバージョンですよ。
php.gr.jp でのパッチは当たってますか?

当たってない場合の対策となると、やはりokuhikiさんの方法でしょうか。
mb_detect_encoding() が信用できないので、"EUC-JP"と決めうちするのが堅いでしょう。

Hackにはなりますが、どうせしばらくmyAlbum-Pはバージョンアップしませんし:-P

xnoopy
投稿日時: 2005/6/29 22:01
常連
登録日: 2004/10/9
居住地:
投稿: 58
Re: myAlbum-Pでの奇妙な(?)文字化け
GIJOEさん、こんにちは。
引用:
今確認したら、PHP4.3.11ですね。

これ、mbstringのエンコーディング認識にバグがあるバージョンですよ。
php.gr.jp でのパッチは当たってますか?

php.gr.jpを覗いてみましたが、バグがあったんですね。とりあえず現在の所は、EUC-JP決めうちで対処するようにしています。
myAlbum-Pの「タイトル」や「説明」入力で化ける文字も管理画面や他のモジュールでは大丈夫だというのは、エンコーディングの判定に関わるルーチンが違うからなんでしょうか?
他のスレッドで報告したxhldでの文字化けの問題もエンコーディングの誤認識も、php4.3.11のmbstringがらみのバグによるものなのでしょうが、こういったマルチバイトがらみのバグは厄介ですね。 :-(

GIJOE
投稿日時: 2005/6/30 4:57
長老
登録日: 2003/4/3
居住地:
投稿: 2137
Re: myAlbum-Pでの奇妙な(?)文字化け

xnoopyさん、こんにちは。

引用:
myAlbum-Pの「タイトル」や「説明」入力で化ける文字も管理画面や他のモジュールでは大丈夫だというのは、エンコーディングの判定に関わるルーチンが違うからなんでしょうか?

そもそも他のモジュールで、mbstringを使っているものは少ないでしょう。

じゃあ、なんでmyAlbum-Pであえてmbstringを使っているかというと、画像と一緒にテキストをPOSTするからです。

他のモジュールのように、テキストのみのPOSTであれば、outputがSJISで、internal_encodingがEUCでも、自動変換でうまく処理されます。もちろん、出力がEUCなら、mbstringそのものが不要です。

ただ、multi-partでPOSTされた場合、テキストが内部エンコードと違っても、自動変換がうまく効きません。(このあたり、PHPバージョンもからんで奇妙な動作があったりもします)

だから、画像と一緒に送られてきたテキストについては、そのテキストだけでエンコーディングを判定して、内部エンコーディングに変換しているわけです。

引用:
他のスレッドで報告したxhldでの文字化けの問題もエンコーディングの誤認識も、php4.3.11のmbstringがらみのバグによるものなのでしょうが、こういったマルチバイトがらみのバグは厄介ですね。 :-(

xhldの話じゃなくて、piCalのRSS出力の話ですよね?
こっちについては、単に私の処理が手抜きなだけ、という気はしています :-P

okuhiki
投稿日時: 2005/8/5 17:36
長老
登録日: 2004/1/24
居住地: Sanin
投稿: 516
Re: myAlbum-Pでの奇妙な(?)文字化け
引用:
GIJOEさんは書きました:

もちろん、出力がEUCなら、mbstringそのものが不要です。

ブラウザから出力時の文字コードを制御する事は可能です。
テンプレートで有れば、

1
<form action='*****' method='post' accept-charset='<{$xoops_charset}>'>

phpで有れば、

1
echo "<form action='*****' method='post' accept-charset='"._CHARSET."'>

とすることで、送信データの文字コードを表示文字コードに指定出来ますね。
あるいは、

1
<form action='*****' method='post' accept-charset='iso-8859-1'>

とすることで、表示文字コードに依存せずに、iso-8859-1で送信させる事も可能ですね。
実際の利用価値は不明ですが参考まで。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

 
To Top