Tutorial
この記事の読了時間:約2分32秒
当ブログ史上最大文字数のタイトルですが、要は 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引数には「丸める文字カウント数 + 付加する文の文字カウント数」を記述すべし!
たまたま被害のない場所に落ちたから良かったものの、もし隣の家を傷付けたり光ファイバーぶった切ったりしてたらと思うと。。。
関連する記事
同じカテゴリーの記事
コメントを投稿する