Own products

  • 新規事業のアイディア創造機

Tutorial

2013
03/25

指定した文字数で文字列をまるめるPHPの関数 mb_strimwidth で、第4引数に「文字列をまるめた後に付加する文字列を指定」する際、色々気を付けないと文字化けるよ、というお話。

この記事の読了時間:約232

  • このエントリーをはてなブックマークに追加

当ブログ史上最大文字数のタイトルですが、要は mb_strimwidth 関数の第4引数に「文字列をまるめた後に付加する文字列」を指定する際、文字コードやら何やら気を付けないと、文字化けしたり指定文字数以下でまるまっちゃったり、つまりはバグるよ!

ってコトで、忘れる前に自分用メモです。

mb_strimwidth 関数の第4引数について

出力する文字列が絶対に全角だけってならいざ知らず、「文字列をまるめたい」ってコトは予期せぬ文字列が前提なワケで。

んで、このmb_strimwidth 関数は「半角=1、全角=2」って数え方をするので、場合によってはカウントが奇数のケースもありあり。

その場合に、文字コードをちゃんと指定していないと末尾の文字が化けるのです!

更に、まるめた文字列の末尾に「…」とか「、、、とでも言うのだろうか」とかを付加すべく、関数の第4引数を指定する際には、その前の第3引数で「付加する文字列のカウント分を足した数」を指定しとかないと、期待にそぐわぬ結果になっちゃいます。

と、そんな御託はどーでもいい!

ぐだぐだ言ってないでコード書くよ、ハゲ!

$str = '最近の強風で実家のトタン屋根が吹き飛んだ、マジで。';

/* 文頭から半角20文字分にまるめて出力 */
echo mb_strimwidth($str, 0, 20);
// [結果] 最近の強風で�
// ('A`;)「文字コードしてないから、、、かな?」

/* 半角20文字分にまるめて、文字コード指定して出力 */
echo mb_strimwidth($str, 0, 20, '', 'utf-8');
// [結果] 最近の強風で実家のトタ
// ( #・∀・)「ヨッシャァァァアアア!!」

/* 半角20文字分にまるめて、末尾に ちくわ大明神 を付加して出力 */
echo mb_strimwidth($str, 0, 20, 'ちくわ大明神', 'utf-8');
// [結果] 最近の強ちくわ大明神
// (((;'A`)))「”最近の強風で実家のトタちくわ大明神”にしたいのに!」

/* 半角20文字 + ちくわ大明神(計・半角32文字分)を出力 */
echo mb_strimwidth($str, 0, 32, 'ちくわ大明神', 'utf-8');
// [結果] 最近の強風で実家のトタちくわ大明神
// ( #・∀・)「ヨッッシャァァァァアアアアアアア!!!!!」

つまるところ、必ず文字コードは指定するようにしつつ、末尾に文字列を足したいなら第2引数には「丸める文字カウント数 + 付加する文の文字カウント数」を記述すべし!

屋根飛んでマジびびったw

たまたま被害のない場所に落ちたから良かったものの、もし隣の家を傷付けたり光ファイバーぶった切ったりしてたらと思うと。。。

  • このエントリーをはてなブックマークに追加

コメントを投稿する

お名前

ご連絡先メールアドレス※非公開

コメント

CAPTCHA


  • このブログのRSSを購読する
  • このブログをtwitterでつぶやく
  • このブログをFacebookで共有する
  • このブログをはてなブックマークで共有する

Favorite feeds

    Contact

    お名前※必須

    ご連絡先メールアドレス

    お問い合わせ内容※必須

    CAPTCHA

    captcha

    Blog parts

    Affiliate