PHPプログラムに関する各種メモ書き

日本語(全角文字)を指定文字数で折り返す(word wrap)Smartyプラグイン

ある文章を指定文字数折り返(強制改行)したい時があります。

そんな時に便利なのがSmartyのwordwrapプラグインがありますが、日本語や全角文字には対応していないので使用出来ません。

そこで日本語対応のSmartyプラグイン

■ modifier.unicode_wordwrap

(引用元:http://goo.gl/JmZjK にインデント機能を拡張しました。)

ファイル名 modifier.unicode_wordwrap.php で下記コードを保存し plugins フォルダに格納

<?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引数 : インデント(デフォルト値:ナシ)

です。

関連エントリー

No.873
02/06 16:23

edit

Smarty
日本語