PHPでマルチバイト文字列をfold(折り返し)する関数が無いみたいなので作ってみました。必要な引数は対象文字列と折り返し幅(バイト)。オプションで改行コード、インデント文字列、文字コードが指定できます。
function mb_fold($str,$width,$cr="\n",$indent="",$encode=null) { $out = $indent; if(! isset($encode)) $encode = mb_internal_encoding(); $lenmax = mb_strlen($str,$encode); $nowlen = 0; for ($i=0; $i<$lenmax; $i++) { $c = mb_substr($str,$i,1,$encode); $cw = mb_strwidth($c,$encode); if(($nowlen + $cw) > $width) { $out .= $cr . $indent . $c; $nowlen = $cw; } else { $out .= $c; $nowlen += $cw; } } return $out; }
使い方はこんな感じ
$body .= mb_fold($data[‘hoge’],30,”\n”,” ”) .”\n”;
たとえばテキストを整形して自動的にメールを送信するプログラムとかに使えます。なお禁則処理は特にしてないので、単純にバイト数で切っていくだけです。