[PHP-users 8993] マルチバイト・シングルバイト含めた文字幅の取得

Koji Yamamoto php-users@php.gr.jp
Sat, 27 Jul 2002 10:10:07 +0900


山本です。
PHP 4.1.2を使用しています。


例えば、

「大阪府枚方市何某町1丁目23番地45号」

という文字列が変数に入っていたとして、印字する際に、
横幅が決まっているため、折り返さないといけない場合に、
文字幅を取得して折り返そうと思ったのですが、
マルチバイトとシングルバイトが混在している為、
substr などでは、マルチバイトの1バイト分だけ残してしまう
ケースがあり、文字化けが発生します。

mb_substrでは、マルチバイト1文字もシングルバイト1文字も、
1文字として扱っているので、幅に添うことが出来ません。

シングルバイトだけを検出する方法があれば、シングルバイト文字の
すぐ後ろに半角スペースを付け、強引に2バイト風にすることも
出来るかと思ったのですが・・・。
その場合、0-9a-zA-Z だけではなく、半角文字すべてを検索対象に
入れてあげないといけなくなるのか??
(知識不足で、もしメタキャラで便利なものがあったら別ですが・・・)



上の例は住所で挙げましたが、実際はもっと複雑な文字列です。
mb_convert_kana で半角→全角に変換するのは出来れば避けたいです。

何か良い方法がありますでしょうか。。。


山本浩二
yamamoto@amatelous.ne.jp