PHPで文字列折り返し (シンプル版と参考)
禁則処理つきはこちら。
組み込み関数 mb_strimwidth を使ってシンプルに。欧文の単語の途中でもずばっと分割しちゃいます。
<?php function ja_wordwrap($string, $n, $break = "\n") { $a = array(); $lines = explode("\n", $string); foreach ($lines as $line) { $len = mb_strlen($line); if ($len == 0) { $a[] = ''; } $p = 0; while ($p < $len) { $t = mb_strimwidth($line, $p, $n); $a[] = $t; $p += mb_strlen($t); } } return implode($break, $a); }
参考
折り返し→禁則処理→実体参照やURLが分割されるのを防ぐ、とやっています。
前掲の記事の ja_wordwrap_token で実体参照やURLを一つのトークンとするようにし、mb_strwidth も実体参照を考慮したものにするとこれと同等、あるいは実体参照の幅のぶん精度の高いものができます。今回は必要ないのでやっていない。