[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/ で円滑メールサポート!■ |
+--------------------------------------------------------------+