返信する: d3diaryサポート板


オプション

参照

Re: ver0.1.0 utf-8環境での不具合
投稿者: なーお 投稿日時: 2010/7/5 19:51

AXYZ-SAKさん、こんにちは。

mb_substr関数は、byte指定ではなくて文字数指定ですよね。 :roll:

そのため、

  • 日本語: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)

という感じで。(他に応用は効きませんが。。)
トリッキーな方法ですが、もし検証いただければ助かります。