[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
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-