ある文章を指定文字数折り返(強制改行)したい時があります。
そんな時に便利なのがSmartyのwordwrapプラグインがありますが、日本語や全角文字には対応していないので使用出来ません。
そこで日本語対応のSmartyプラグイン
(引用元:http://goo.gl/JmZjK にインデント機能を拡張しました。)
<?php function smarty_modifier_unicode_wordwrap($str, $len=80, $break="\n", $indent='' ){ $str = str_replace( "\r", $break, str_replace( "\r", "\n", str_replace("\r\n", "\n", $str) ) ); $str = preg_replace('/(.{'.$len.'})/u', '${1}'.$break, $str); if (strcmp($indent,'')==0){ return $str; } else{ $ar = preg_split("/{$break}/",$str); for($i=0 ; $i<count($ar); $i++){ $ar[$i] = $indent.$ar[$i]; } return join($break, $ar); } } ?>
下記の例だと($my_text を日本語40文字で折り返して各業の文頭に■を追加)となります。
{$my_text|unicode_wordwrap:40:"\n":"■"} 第1引数 : 文字数(デフォルト値:80) 第2引数 : 改行コード(デフォルト値:¥n) 第3引数 : インデント(デフォルト値:ナシ)
です。