PHPで文字列を扱っていると、長いテキストを一定の文字数で切り詰めて表示したい場面がよくあります。

例えば、ブログの記事一覧やショッピングサイトの商品説明など、限られたスペースにテキストを収める必要があるケースは多いです。
そのまま全文を表示してしまうとレイアウトが崩れてしまうため、指定した文字数で切って末尾に「…」を付けるのが一般的です。

そこで便利なのが、PHPのmb_strimwidth()関数です。
この記事では、mb_strimwidth()の基本的な使い方から、WordPressでの活用方法まで丁寧に解説していきます。

PHPで文字列を特定の文字数で丸める方法は?

文字列を指定した幅で切り詰める最もシンプルな方法は、mb_strimwidth()関数を使うことです。

基本的な使い方は、このようになります。

<?php
$text = "PHPで文字列を特定の文字数で丸める方法を解説します。";
echo mb_strimwidth($text, 0, 30, "...", "UTF-8");
// 出力:PHPで文字列を特定の文字...
?>

これだけで、指定した幅を超える部分が切り詰められ、末尾に「…」が付加されます。
mb_strimwidth()関数はPHPの組み込み関数なので、特別なライブラリを追加する必要もなく、手軽に利用できます。

mb_strimwidth()は「半角=1」「全角=2」として幅を計算します。
そのため、第3引数に30を指定した場合、全角文字だけなら15文字分、半角文字だけなら30文字分が表示されます。文字数ではなく「幅」で指定する点に注意しましょう。

詳細は公式マニュアル(PHP: mb_strimwidth – Manual)も確認すると安心です。

mb_strimwidthの詳しい使い方

こちらのセクションでは、mb_strimwidth()関数の詳しい使い方を説明していきます。

まず、使用できる引数はこちらです。

第1引数:丸めたい文字列
第2引数:開始位置(通常は0を指定)
第3引数:丸める幅(半角=1、全角=2として計算)
第4引数:末尾に付加する文字列(省略可、デフォルトは空文字)
第5引数:文字エンコーディング(省略可、「UTF-8」を推奨)

それでは、実際にコードを書きながら説明します。

末尾の文字列を指定する

第4引数で、切り詰めた際に末尾に付加する文字列を指定できます。
「…」や「…」がよく使われます。

<?php
$text = "これはサンプルのテキストです。長い文章を丸めて表示します。";
echo mb_strimwidth($text, 0, 30, "…", "UTF-8");
// 出力:これはサンプルのテキス…
?>

第4引数に指定した文字列も幅に含まれるため、「…」(半角3文字分)や「…」(全角1文字=2幅分)を考慮した上で第3引数の値を設定しましょう。

開始位置を指定する

第2引数を変更すると、文字列の途中から切り出すこともできます。

<?php
$text = "PHPのmb_strimwidth関数を使ってみましょう。";
echo mb_strimwidth($text, 6, 20, "...", "UTF-8");
// 出力:strimwidth関数を...
?>

ただし、開始位置を変更するケースはあまり多くないので、通常は0を指定しておけば問題ありません。

元の文字列が指定幅以下の場合

元の文字列が指定した幅以下の場合は、切り詰めは行われず、そのまま出力されます。

<?php
$text = "短いテキスト";
echo mb_strimwidth($text, 0, 40, "...", "UTF-8");
// 出力:短いテキスト(「...」は付かない)
?>

このため、文字列の長さを事前にチェックする必要がなく、そのまま関数に渡せます。

参考:PHP 公式マニュアル – mb_strimwidth

mb_strimwidthのよくある実装例

実際によくある場面を想定し、いくつかの実装例を紹介します。

WordPressの記事一覧で本文を丸めて表示する

WordPressのトップページやカテゴリーページで記事一覧を表示する際、本文の冒頭部分だけを抜粋して表示するケースです。

<?php
echo mb_strimwidth(strip_tags($post->post_content), 0, 100, "...", "UTF-8");
?>
<br><a href="<?php echo get_permalink(); ?>">続きを読む →</a>

strip_tags()でHTMLタグを除去してからmb_strimwidth()で丸めることで、タグが途中で切れてレイアウトが崩れるのを防いでいます。

表示イメージはこちらです。

テキストテキストテキストテキストテキストテキストテキスト…
続きを読む →

商品説明の抜粋を表示する

ショッピングサイトの商品一覧ページなどで、商品説明を短く表示する場合にも使えます。

<?php
$description = "この商品は最高品質の素材を使用しており、耐久性に優れています。日常使いからアウトドアまで幅広くお使いいただけます。";
echo '<p class="description">' . mb_strimwidth($description, 0, 60, "…", "UTF-8") . '</p>';
// 出力:この商品は最高品質の素材を使用しており、耐久性に優…
?>

mb_substrとの違い

文字列を切り詰める関数としてmb_substr()もありますが、mb_strimwidth()とは動作が異なります。

mb_strimwidth()mb_substr()
切り詰めの基準幅(半角=1、全角=2)文字数(半角も全角も1文字)
末尾の文字列付加第4引数で指定可能自分で連結する必要がある
幅の計算に末尾文字列を含む含む対象外

表示幅を揃えたい場合はmb_strimwidth()、純粋に文字数で切りたい場合はmb_substr()を使い分けましょう。

mb_strimwidthを使うときの注意点

mb_strimwidth()は便利な関数ですが、初心者がハマりやすい注意点もあります。

  • 第3引数は「文字数」ではなく「幅」で指定する
    全角文字は2幅として計算されるため、「全角20文字分」を表示したい場合は40を指定する必要があります。
  • 第4引数の文字列も幅に含まれる
    例えば第3引数に30、第4引数に"..."(半角3幅分)を指定すると、本文は27幅分だけ表示されます。
  • HTMLタグを含む文字列をそのまま渡さない
    タグの途中で切れると表示が崩れるため、事前にstrip_tags()でタグを除去してから渡しましょう。

まとめ

今回は、PHPで文字列を特定の文字数で丸める方法を紹介しました。

  • 文字列を指定した幅で切り詰めるならmb_strimwidth()関数が便利
  • 半角=1、全角=2として幅を計算するため、表示幅を揃えやすい
  • 第4引数で末尾に「…」などの文字列を自動付加でき、しかもその文字列も幅に含めて計算してくれる
  • HTMLタグを含む文字列にはstrip_tags()と組み合わせて使う

mb_strimwidth()関数を活用することで、記事一覧や商品一覧の表示がきれいに揃い、ページ全体の見栄えが良くなります。
文字数で切りたい場合はmb_substr()との使い分けも意識してみましょう。

本記事で紹介した公式ドキュメント