[PHP] 文字数制限処理

2018年12月30日

PHP テクノロジー プログラミング

t f B! P L
文字の丸め込みが必要な時に、PHPでは「mb_strimwidth」という関数がありますが、これまで使って来なかったのでですが、少し便利さを感じたので、改めて利用価値を考えて今後利用していこうと思います。 そもそもWEBページで長文を丸め込みたい場合は、先日ブログでも書いた「CSSでの丸め込み操作」で事足りるのですが、実はそれだけでは物足りない事象があったので、サーバーサイド、フロントサイドの両面での利用を熟知しておく必要があります。 [CSS] 文章がはみ出してしまう時の対応方法

「mb_strimwidth」の基本情報

リファレンスページ http://php.net/manual/ja/function.mb-strimwidth.php どうやらPHP4バージョンからあった関数らしいのですが、全く使ってこなかったですね。 PHPは基本関数だけでやりくりした方が効率的と考えていたからでしょうね。 この関数のメリットは、mb_と付いているのでなんとなくわかると思いますが、全角(マルチバイト)文字列に対応している点でしょう。 これまで、は以下の様に書いていましたが、この関数をしらなかったが故のあがきがよく分かります。 $string = "***"; //長文 $string2 = mb_substr($string , 0 , 100); if($string!=$string2){$string2.="...";} echo $string2; 文字列を指定文字数(バイト数)でちょん切って、元文字列との差分がある場合(削除した場合)は、うしろに"..."をつけるという流れです。 これを「mb_strimwidth」では、以下の様に一発で書けます。 $string = "***"; // 長文 mb_strimwidth($string , 0 , 100 , "..." , "UTF-8"); 受け渡している値は、それぞれ以下の様になっています。
1. start 2. length 3. 丸めた時の後ろにつける文字列(任意) 4. 文字エンコード指定(任意)
簡単すぎて鼻血が出そうでした。 ちゃんとリファレンス読むという事が重要なのですね。 仕事の効率がアップしたに違いありません。

何故CSSだけではダメなのか?

表示しているエレメントのサイズに合わせて丸め込んでくれるcssは非常に便利なのですが、CSSでの丸め込み操作は、HTMLデータとしては全文が書かれている状態なので、無駄にパケット送信をしてしまうという効率の話が出るかと思います。 また、エレメントの表示項目として記述する場合はcssで問題なく行えますが、title要素のような、属性に書き込む時にはcssでは丸め込んでくれません。 また、cssで丸め込むために、タグ構成をちゃんと整えなければいけません。 構成変更が難しい改修作業などの場合は、サーバーサイドの出力で丸め込んだ方が確実でエラーが起きにくいでしょう。 こうした、メリット・デメリットをちゃんと理解した上で、どちらかしか使わないのではなく、ケースバイケースで両方を利用できる状態にしておく事が重要です。

注意点

この関数を使っていて気が付いた注意点としては、引数で指定する"length"が、文字数単位ではなく、バイト数単位であるという事です。 「あいうえお」という文字を「あいう...」と丸め込みたい場合は、 $string = "あいうえお"; // 長文 mb_strimwidth($string , 0 , 5 , "..." , "UTF-8"); ではなく、 $string = "あいうえお"; // 長文 mb_strimwidth($string , 0 , 9 , "..." , "UTF-8"); と書かなければいけません。 lengthは6マルチバイトで考えたら"6"ではないかと思われがちですが、付与する"..."の3バイトを仕込んでおく必要があります。 この点が結構落とし穴になっているようなので、理解してお使いくださいl。 SNSでの文字列取得などを仕事で行う場合がありますが、そうした時にかなりの頻度で利用できますね。 レポート作成などでも使えそうで、これまでこの関数を知らなかった分、効率改善して取り戻したいと思います。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ