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

松嶋祥文 php-users@php.gr.jp
Sat, 27 Jul 2002 11:01:31 +0900


松嶋@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;
}

----- 結果 -----
大阪府
枚方市
何某町
1丁目2
3番地4
5号

連続する半角文字の間では改行しないとか、禁則処理のようなものを
足した方が良さそうですね。^^;

-- 
                                               ,-------------+
+---------------------------------------------'              |
| システム開発&エンジニアスクール アイティーブースト       |
| 取締役副社長   松嶋 祥文 [ mats@itboost.co.jp ] ,--------------+
| +----------------------------------------------'               |
| | ★ Linux 関連の技術情報満載!      http://www.itboost.co.jp/ |
+-| ■ MailDealer http://maildealer.jp/ で円滑メールサポート!■ |
  +--------------------------------------------------------------+