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”;

たとえばテキストを整形して自動的にメールを送信するプログラムとかに使えます。なお禁則処理は特にしてないので、単純にバイト数で切っていくだけです。

LINEで送る
Pocket