I love iPhone, Android, Cocos2d-x
CakePHP Textヘルパーの truncate を全角文字に対応させてみた
CakePHP の Text ヘルパーに truncate という指定された文字列を任意の長さに省略するメソッドがあります。
しかし、このメソッドは全角文字を考慮していないため全角文字に用いると文字化けすることがあります。
そこでこのメソッドを全角文字に対応させてみました。
function truncate($text, $length, $ending = '…', $exact = true) { if (strlen($text) < = $length) { return $text; } else { mb_internal_encoding("UTF-8"); if (mb_strlen($text) > $length) { $length -= mb_strlen($ending); if (!$exact) { $text = preg_replace('/\s+?(\S+)?$/', '', mb_substr($text, 0, $length+1)); } return mb_substr($text, 0, $length).$ending; } else { return $text; } } }
直接 Text ヘルパーを修正するとバージョンアップなどのときに困るので、
cake/libs/view/helpers/text.php を app/views/helpers/mb_text.php にコピーしクラス名を
class MbTextHelper extends Helper{
として、truncate メソッドを上記のように修正しました。
使用するときはコントローラ内で、
var $helpers = array("MbText");
view で
echo $mbText->truncate("あいうえおかきくけこ", 5, "…", true);
とすると
あいうえ…
と表示されます。
関連する投稿
5 comments
コメントをどうぞ
Additional comments powered by BackType
[...] http://www.syuhari.jp/blog/archives/147 Categories: CakePHP Posted By: admin Last Edit: 20 12 月 2008 @ 02 00 PM E-mail • [...]
[...] CakePHP Textヘルパーの truncate を全角文字対応方法 投稿日:2012年9月9日 作成者: hi-tan 参考URL: http://blog.syuhari.jp/archives/147?CakePHP Textヘルパーの truncate を全角文字に対応させてみた [...]
Maria Ehrgott…
CakePHP ã?® Text ã??ã??ã?‘ã??ã?? truncate…
1laboratories…
…
Best Cheap Proxies…
CakePHP ã?® Text ã??ã??ã?‘ã??ã?? truncate…