ver0.1.0 utf-8環境での不具合
- このフォーラムに新規トピックを投稿できます
 - このフォーラムではゲスト投稿が許可されています
 
投稿ツリー
- 
    
 ver0.1.0 utf-8環境での不具合
    (AXYZ-SAK, 2010/7/5 16:20)
    
     - 
    
 Re: ver0.1.0 utf-8環境での不具合
    (なーお, 2010/7/5 19:51)
    
     - 
    
 Re: ver0.1.0 utf-8環境での不具合
    (AXYZ-SAK, 2010/7/7 9:35)
    
     - 
    
 Re: ver0.1.0 utf-8環境での不具合
    (なーお, 2010/7/8 7:22)
    
     
			 
	投稿数: 13
	ver0.1.0について、UTF-8環境に於ける不具合を確認しました。
[症状]
 カレンダー部の曜日表記が文字化けします。
[原因]
 xoops_trust_path/modules/d3diary/includefunction.php内の
 言語ファイルからの曜日呼び出しにおいて、
  例)mb_substr(constant("_MD_W_SUN"),0,2)
 となっているため、2byteだけが切り出され、3byteである
 urf-8ではコケる状態です。
[取り急ぎの対応と結果]
 決め打ちでmb_substr(constant("_MD_W_SUN"),0,3)にしたところ
 文字化けは解決しました。
[根本的な解決をするとしたら……]
 $mod_w_byte みたいな変数を設定したうえで、
 languageがja_utf8かどうかをチェックして、その場合は $mod_w_byte=3、
 そうでない場合は $mod_w_byte=2 として、
  mb_substr(constant("_MD_W_SUN"),0,$mod_w_byte)
 ……という感じにするしかないのかな、とも思ったりします(^^;
			 
	投稿数: 1796
	AXYZ-SAKさん、こんにちは。
mb_substr関数は、byte指定ではなくて文字数指定ですよね。 
そのため、
- 日本語:1文字の文字列から2文字を取り出す・・1文字取得
 - 英語 :3文字の文字列から2文字を取り出す・・2文字取得
 
となるはずなんですが、、
(ver0.09でUTF-8環境で、問題の報告はありませんでした)
 調べるとphpのロケール関連で環境依存になりそうですね。 手元にUTF-8などの3バイト文字ロケール環境が無いので検証できないのですが、例えば、以下のような感じでどうでしょうか。
(mb_substrがfalseを返すようですと元も子も無いですが。。)
$str_enco = mb_internal_encoding();
$str_temp1 = mb_substr(constant("_MD_W_SUN"),0,2,$str_enco);
$str_temp2 = mb_substr(constant("_MD_W_SUN"),0,2);
$wk_strlen = ($str_temp1 != $str_temp2) ? 3 : 2;とした上で、それぞれの切り出し部分は
mb_substr(constant("_MD_W_SUN"),0,$wk_strlen)という感じで。(他に応用は効きませんが。。)
トリッキーな方法ですが、もし検証いただければ助かります。
			 
	投稿数: 13
	mb_substr関数は、byte指定ではなくて文字数指定ですよね。
おぅ……確かに。
すっとぼけてました _| ̄|○
調べるとphpのロケール関連で環境依存になりそうですね。
手元にUTF-8などの3バイト文字ロケール環境が無いので検証できないのですが、
例えば、以下のような感じでどうでしょうか。
(mb_substrがfalseを返すようですと元も子も無いですが。。)
検証してみたところ、みごとにコケました。
で、mb_internal_encodingの返り値を見てみたら……ISO-8859-1。
どうやら、当該サーバのphp.iniで、mbstring.internal_encodingがpassに
指定されているようで。
まぁ、広汎かつ多岐にわたって使用される事を前提にしたサーバだと
あってもおかしくはない設定ではあります。
で、その辺を鑑みた場合……
$str_enco = mb_internal_encoding();
これを、$str_enco = _CHARSET; にしちゃった方が現実的かな、とw
ちなみにこれも、当該症状の発生している環境でテストしましたが
正常動作いたしました。
			 
	投稿数: 1796
	AXYZ-SAKさん、こんにちは。
検証、および改善案のご報告、ありがとうございます。 
これを、$str_enco = _CHARSET; にしちゃった方が現実的かな、とw
なるほど、_CHARSETですか。
ちょっと迷いますね。また別の環境でおかしくなる可能性もありそうな。。
やはりこの方法はトリッキーで不安定かもしれませんので、次回以降のバージョンでは方式を変更するかもしれません。 それまでは、カレンダーの曜日が文字化けしたらAXYZ-SAKさんの方法で対応いただくようにお願いします。(ご使用の皆様)
では。
