PHPで文の中間を省略して一定の幅に収める

2017-03-04

#PHP 文字列

「文の中間を省略して一定の幅に収める」処理は需要がありそうですが、検索してみた限りでは見つからなかったので作ってみました。

PHPには、文字列が一定の長さ(幅)を超えたら丸める関数 mb_strimwidth() が標準で有ります。しかし、この関数だけでは文字列の中間を省略する事はできませんので、この関数を応用して、一定の幅を超えたら指定位置の文字列を省略する関数にしました。少し長いですが、ソースコードは下記の通りです。

解説

出来る限りソースコードのみで解るように書いたつもりですが、いくつか補足します。

引数のうち、第2及び第3引数は「幅」単位で指定するようになっています。
これは mb_strimwidth() で使われる幅と同じものです。

第3引数で指定された位置に省略記号(第4引数で指定可)が挿入されます。
なお、末尾に省略記号を付ける動作は mb_strimwidth() で可能ですので省きました。

第1引数で渡された文字列が第2引数の幅に満たない場合は、何も処理を行わず文字列をそのまま返します。
省略記号が付加されるのは、省略しないと指定された幅に収まらない場合のみです。

関連記事
PHPのmb_strimwidthが意図通り動かない問題

利用時の注意

PHP5.6 で動作確認しました。PHP5 以降であれば恐らく動くと思います。

マルチバイト文字列関数(mb_*)を呼び出していますので、実際の挙動はそれらの関数に依存します。
予め mb_internal_encoding() で適切な内部文字エンコーディングを設定してからご利用ください。

コードは非商用に限り、そのままご利用頂いても構いません。
適切に動作するよう心がけましたが、不具合があるかもしれません。無保証ですのでその点はご了承願います。利用やバグ等の報告は頂ければ嬉しいです。

QooQ