mb_strimwidth

mb_strimwidth関数:文字列を一定の幅で切り詰める

使い方

$trimed_text = mb_strimwidth( $text, $startpos, $endpos, $marker, $encoding );

文字が一定の幅になったら「…」とかを最後につけたして切り詰めたいってこと結構ありますよね。
文字が長すぎて、ページが崩れるなんてことになったら、
もうこの関数の出番です。

ちょっと引数が多いので、分かりづらいのですが、
使い方はとても簡単です。
第1引数にはその文字列、第2引数には切り詰めるポジションの開始位置、第3引数には切り詰めるポジションの終了位置、そして、第4引数には切り詰めたときに付け足す文字列(「…」とか)、最後にその文字エンコーディングを指定します。

こんな感じです。

//$textを0番目の位置から20番目の位置までに切り詰めて、末尾に...を付け足す
$trimed_text = mb_strimwidth( $text, 0, 20, '...', 'UTF8' );

サンプルプログラム

<?php
$text = 'この文字列がとても長くて困っているんです。どなたか助けてください。';
echo "Original: ".$text.PHP_EOL;

$trimmed_text = mb_strimwidth( $text, 0, 20, '...', 'UTF8' );
echo "Trimmed: ".$trimmed_text.PHP_EOL;

実行結果

Original: この文字列がとても長くて困っているんです。どなたか助けてください。
Trimmed: この文字列がとて...

この関数のポイントは、第2引数や第3引数に指定するポジションは文字数ではないということです。
文字数だと全角文字と半角文字で幅が変わってくるので、使いづらいですよね。
でもこの関数は大丈夫。文字の幅で判断してくれます。
全角文字は幅を2として計算し、半角文字は幅を1として計算してくれる、何ともすぐれた関数なのです。

文字の幅だけを調べたいならmb_strwidhという関数がありますので、そちらもご覧あれ。

一応、どういう文字の幅の計算テーブルをご紹介します。

Unicode番号 文字種 文字の幅
U+0000~U+0019 制御文字 0
U+0020~U+1FFF シングルバイト文字 1
U+2000~U+FF60 マルチバイト文字 2
U+FF61~U+FF9F 半角カタカナ 1
U+FFA0~ マルチバイト文字 2

注意点

利用上の注意点というかポイントとして、第4引数のマーカーを含めて第2引数、第3引数で指定した文字の幅に切り詰められます。
たとえば、0~20(要は20の幅にしたい)を指定していて、第4引数に「…」と3文字指定している場合、
マーカーが3の文字幅があるため、17の文字幅まで元の文字列が切り詰められます。
※サンプルプログラムの実行結果を見てみてください。

使いどころ

ブログを途中まで表示してあとは…にするとか、ブログの投稿のタイトルを長すぎたらちょんぎるとか。。
そういう使い方が一般的かと思います。
短い文字列の場合には、そのままの文字列を返してくれるのでとても使いやすいですよね。

私はこの関数を知ってからPHPが好きになりました。

公式サイト

http://jp1.php.net/manual/ja/function.mb-strimwidth.php
http://jp1.php.net/manual/ja/function.mb-strwidth.php