[PHP-users 8995] Re: マルチバイト・シングルバイト含めた文字幅の取得
Koji Yamamoto
php-users@php.gr.jp
Sat, 27 Jul 2002 14:53:35 +0900
山本です。
松嶋@ITBoost 様、ありがとうございます。
mb_strcut関数の存在は知っておりましたが、mb_substrと全く
一緒だと思っていました。
プリンタ関数を使って帳票を印字していたので、
「\n」を入れると、「・」と印字されてしまうので、
1行ずつ配列に入れ直して表示することが出来ました。
ありがとうございます!
> 松嶋@ITBoost です。
>
> | mb_substrでは、マルチバイト1文字もシングルバイト1文字も、
> | 1文字として扱っているので、幅に添うことが出来ません。
>
> mb_strcut関数でお望みの動作が実現できるかとおもいます。
>
> 適当に書いたのでもうちょっと上手く書けるかもしれませんが、
> 例えばこんな感じでどうでしょう?
>
>
> print fold("大阪府枚方市何某町1丁目23番地45号", 6);
>
> // $aLength == 1 の時は無限ループしそう…。
> function fold( $aStr, $aLength = 76, $aEnc = "EUC-JP" ) {
>
> $aStr = ereg_replace("\r\n", "\n", $aStr);
> $aStr = ereg_replace("\r", "\n", $aStr);
> $arrLine = array();
> $arrLine = split("\n", $aStr);
>
> $result = "";
> foreach( $arrLine as $id => $data ) {
> $pos = 0;
> do {
> $ok = mb_strcut( $data, $pos, $aLength, $aEnc );
> $result .= $ok . "\n";
> $data = mb_strcut( $data, $pos + $aLength, strlen($data), $aEnc );
> } while ( strlen($data) >= $aLength );
> $result .= $data;
> }
>
> return $result;
> }
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
有限会社アマテラス 山本浩二
TEL 075-959-2810
FAX 075-959-2818
Email:yamamoto@amatelous.ne.jp
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-