PHPのmb_strimwidthで文字列を抜粋

文字列の切り出しで文字化け

長い文字列から一部の文章を抜粋したい場合がある。mb_substrが文字列を切り出す関数としては有名なのだが、多数の文章で試してみたところ末尾の文字が文字化けするケースがあり、

mb_strimwidth

という関数を利用したところ、末尾の文字化けが発生しなくなった。

文字列を抜粋するにあたり、改行やhtmlタグなどを除去してから行っている。その例が以下のコード。

$long_sentence = str_replace(array("\r\n","\r","\n"), '', $long_sentence);
$long_sentence = strip_tags(htmlspecialchars_decode($long_sentence));
//$description = mb_substr($long_sentence, 0, 180, "utf-8");
//$description = mb_strcut($long_sentence, 0, 180, "utf-8");
$description = mb_strimwidth($long_sentence, 0, 180, "…", "utf-8");

strip_tagsという関数はCakephpの機能でphpの関数ではないので、Cakephpユーザーではない場合には、php純正のタグ除去関数に置き換えてほしい。

上の

mb_substr
mb_strcut

だと切り出した文字列の末尾が文字化けするケースが発生した。2バイト文字が半分で切り出された結果だと推測している。が、mb_strimwidthでは、その問題を回避することができた。おまけに、末尾に任意の文字列(・・・など)を追加することができる。

おぼえておきたい関数である。

mb_strimwidth
http://php.net/manual/ja/function.mb-strimwidth.php

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PHPのmb_strimwidthで文字列を抜粋の記事にコメントを投稿