mb_strimwidth

Posted by muchag | PHP | 2011-07-01 (金) 15:44:55

こんな便利な関数の存在を忘れて
mb_strlenmb_substr を使ってコーディングしちゃってた・・・。

mb_strimwidth
文字列を指定文字数で丸め、接尾辞を追加してくれる関数。

PHP Manual:mb_strimwidth

【環境】
[ PHP ] 5.3.1
書式

string mb_strimwidth ( string $str , int $start , int $width [, string $trimmarker [, string $encoding ]] )

文字列 str を指定した幅 width で丸めます。

第1引数:元になる文字列
第2引数:文字数カウント開始位置。先頭は 0
第3引数:最大文字列長。半角は 1 、全角は 2 で計算。端数切捨て
文字列を丸めた場合は接尾辞の文字数も含む
第4引数:文字列を丸めた場合に付ける接尾辞。省略可
第5引数:文字コード。省略可
 

挙動
  1. $width = 10;
  2. $suffix = '...';
  3.  
  4. // 半角
  5. print mb_strimwidth('0123456789', 0, $width, $suffix, 'UTF-8');
  6. // 0123456789
  7.  
  8. // 全角(UTF-8)
  9. print mb_strimwidth('0123456789', 0, $width, $suffix, 'UTF-8');
  10. // 012...
  11.  
  12. // 半角カナ(UTF-8)
  13. print mb_strimwidth('アイウエオカキクケコ', 0, $width, $suffix, 'UTF-8');
  14. // アイウエオカキクケコ
  15.  
  16. // 全半角混合(UTF-8, 奇数が全角)
  17. print mb_strimwidth('0123456789', 0, $width, $suffix, 'UTF-8');
  18. // 01234...
  19.  
  20. // mb_substr 。全半角混合(UTF-8, 奇数が全角)
  21. print mb_substr('0123456789', 0, $width - 3).'...';
  22. // 0123456...

 

6,14行目

丸めなくてすむ場合は、当然接尾辞なし。
 

10,18行目

丸める場合は、接尾辞まで含めて文字列長を計算。
 

10行目

端数が出たら切り捨て。
 

20-22行目

mb_substr を利用すると、全角半角関係無しに文字数を数えるので
「全て全角」の場合と「全て半角」の場合で
見た目の文字列の長さが大きく変わる可能性あり。

PHP | 2011-07-01 (金) 15:44:55 |

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment