PHP CSS 表示枠からはみ出した文字列を省略して表示する
表示枠からはみ出した文字列を省略して表示します。文字列は全角文字と半角文字が混在しているとします。
(たまに同じような処理を書きますが、いつもいつも忘れてしまいます。今回はメモを残します。)
1.使用するPHPのマルチバイト文字列関数
下の2つの関数のパラメータで、エンコーディングを指定することが大切です。
▼mb_strwidth
「文字列 str
の幅を返します。マルチバイト文字は、通常はシングルバイト文字の倍の幅となります。」(PHP: mb_strwidth - Manual より引用)
▼mb_substr
「文字数に基づきマルチバイト対応の substr() 処理を行います。位置は、 str
の始めから数えられます。 最初の文字の位置は 0、2 番目の文字の位置は 1、といったようになります。」(PHP: mb_substr - Manual より引用)
2.手順
- 表示枠(divタグ内)に最大何文字のシングルバイト文字が表示できるか調べます。
- シングルバイト文字の最大文字数を文字列の最大幅とします。
- 文字列の幅が最大幅より大きい場合、後ろから1文字削ります。
- 1文字削った文字列の幅を最大幅と比較します。
- 文字列の幅が最大幅より小さくなるまで繰り返します。
- 最後に省略マーク「...」をつけます。
3.サンプルソース
下の例では、$text の最大幅を12としています。
$n = 0;
while (mb_strwidth($text, mb_internal_encoding()) > 12) {
$label_text = mb_substr($text, 0, 12-$n, mb_internal_encoding());
$n++;
}
if ($n > 0) {
$text .= '...';
}
4.cssで
CSSで、表示枠からはみだした文字列を省略して表示することができます。
表示枠が1行の場合に使えます。
手順
表示枠のブロック要素(divタグ、pタグなど)に下のプロパティを付けます。
▼ width 表示枠の幅
▼ overflow "visible" 以外のものを指定
▼ white-space: nowrap;
(IE, WebKit (Safari, Chrome), Firefox 7, Opera 11)
▼ text-overflow: ellipsis;▼
(Opera 9-10)-o-text-overflow: ellipsis;
例
div .test {
text-overflow: ellipsis;
width: 60%;
overflow: hidden;
white-space: nowrap;
-o-text-overflow: ellipsis;
}
参照
CSSではみ出した文字を省略する「text-overflow: ellipsis;」がいつの間にかPCでも使えるようになってた! - tacamy.blog