PHP/Laravel

【PHP/Laravel】表示する文字数に制限をかける方法

しろう
しろう
こんにちは、シロウです。

今回の記事ではタイトル通り、表示する文字数に制限をかける方法を解説していきます!

掲示板サイトやSNSアプリとかを作っていると「全文表示するのは投稿の詳細画面だけにして、一覧ページでは投稿の一部分だけを表示したいなー」とかありますよね。

ということで『表示する文章を任意の文字数に制限する機能』を紹介します。

Laravelで表示する文章を任意の文字数に制限する方法

コードとしては以下の通りです。

{!! nl2br(e(Str::limit($post->content, 30))) !!}

上記の例であれば指定した文章の30文字目までが切り取られて、それ以降は「…」として表示されます。

ちなみにLaravel6以前であれば「str_limit」を利用することもできますが、Laravel6以降では呼び出し方が「Str::limit()」となったので注意が必要です。

詳しくは「Laravelでstr_limitが使えない時の解決方法」をどうぞ(*´ω`*)ノ

nl2br

こちらはPHPで改行コード「\n」を実際にHTML(<br/>)として出力してくれる関数です。

本来ならエスケープされてしまうところを、改行コードだけをHTMLに変換してくれる便利な関数です。

まぁ簡単に言うと、『これをつけないと文章が改行されずに表示されてしまう』ということ。

e()

e()」は()の中身をエスケープするために必要となります。

これがないと悪意あるユーザーからの攻撃を受けてしまうので、必ずつけましょう。

ちなみにLaravelの場合「{!! !!}」ではなく「{{ }}」を使用すればエスケープしてくれますが、それだと改行コードもエスケープされて上手く改行できません。

Str::limit()

Str::limit()」は引数にしていした文章を指定した文字数まで表示してくれる関数です。

Str::limit(文章,表示する文字数)

って感じになります。

【補足】文章の最後を「…」ではなく指定の文字にしたい場合

もしかすると「…」ではなく「‪続き‬を読む」などの任意の文字にしたい人もいると思います。

そのような場合は第三引数に「$end = '任意の文字'」を指定してやればOK。

Str::limit($post->content, 3,$end = '【続きを読む】')

具体的には上記の通りです。

これで、文章の最後が「…」ではなく「【続きを読む】」という文字になります。

【蛇足】自分で開発していたコード

実は元々はこの記事では下記のコードを紹介しようとしていました。

public function textLimit($content)
    {
        //文字数の上限
        $limit = 30;
 
        if (mb_strlen($content) > $limit) {
            $content = mb_substr($content, 0, $limit);
            return $content. '[‪...続き‬を読む]' ;
        } else {
            return $content;
        }
    }

しかし、調べていると前述したコードが「Laravelでブログの本文の続きを「…」にする方法」にて紹介されていたのでそちらをパク紹介させて頂きました。

いつの時代も先人が神がかり的に便利な方法を用意してくれていて本当に感謝しかないですm(_ _)m

何はともあれ、これにて今回はおわりです(*´ω`*)ノ