[PHP]日本語の文字数でwordwrapして折り返す方法
日本語の文字数でwordwrapして折り返す関数はビルドインではないため、下記のように自分で関数を実装する
function mb_wordwrap($string, $width=75, $break="\n", $cut = false) {
if (!$cut) {
$regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){'.$width.',}\b#U';
} else {
$regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){'.$width.'}#';
}
$string_length = mb_strlen($string,'UTF-8');
$cut_length = ceil($string_length / $width);
$i = 1;
$return = '';
while ($i < $cut_length) {
preg_match($regexp, $string, $matches);
$new_string = (!$matches ? $string : $matches[0]);
$return .= $new_string.$break;
$string = substr($string, strlen($new_string));
$i++;
}
return $return.$string;
}
使い方
$story = mb_wordwrap($storyline, 21, '<br/>', true);