Laravelのヘルパー関数って便利なものがいっぱいありますよね。
特に str_limit
という関数が素敵に感じました。
文字列を指定した数値で切り詰める関数です。
ですが、日本語で使うときは要注意です。
例えば、12いちにー
という文字列に str_limit
を使用してみましょう。
長さ | 理想 | 現実 |
---|---|---|
1 | 1 | 1 |
2 | 12 | 12 |
3 | 12い | 12 |
4 | 12いち | 12い |
5 | 12いちに | 12い |
6 | 12いちにー | 12いち |
どうやらマルチバイトの文字列でこけるようです。
なぜそのようなことが起こるか調べてみたところ、str_limit
は文字数でなく、文字幅で切り詰めるようになっていました。
<?php public static function limit($value, $limit = 100, $end = '...') { if (mb_strwidth($value, 'UTF-8') <= $limit) { return $value; } return rtrim(mb_strimwidth($value, 0, $limit, '', 'UTF-8')).$end; }
文字幅で切り詰めるケースは日本では無さそうなので、文字数で切り詰める関数を自作したほうがよさそうです。
こんな感じでしょうか。
<?php public static function str_limit($value, $limit = 100, $end = '...') { if (mb_strlen($value, 'UTF-8') <= $limit) { return $value; } return rtrim(mb_substr($value, 0, $limit, 'UTF-8')).$end; }