ある文章を指定文字数折り返(強制改行)したい時があります。
そんな時に便利なのが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引数 : インデント(デフォルト値:ナシ)
です。