WordPressなど、記事の最初の何文字かを引っ張ると最後の文字が文字化けする件
WordPressなど、記事の最初の何文字かを引っ張ると最後の文字が文字化けする件
文章で伝えると、この現象を説明するのが難しいのですが、WorpdPressなどブログのトップページで、記事の最初の何文字かを引っ張って表示すると、なぜか最後の文字が文字化けすることがよくあります。
(実は私のブログのトップページでも同じ現象が起きていて、いつかネタにしようと思ってわざとそのままにしておきました)
WordPressのブログに、最後の文字が文字化けしているケースをおく見かけますが、対処方法は非常に簡単です
なぜ最初の何文字かを引っ張ると最後の文字が文字化けするのか
原因が分かれば解決方法は簡単です。
substrはマルチバイト非対応だから
文字列を好きなように ここから、ここまで~と省略するのに最もよく利用されるのがsubstrですが、このsubstrは2バイト文字に対応していないため、
半角と全角の混じった文字列を省略するのに不向きだから
です。
英語圏で作られたテンプレートは当然2バイト文字のことは考えていないので、そこで日本語サイトの文字列をsubstrを使って無理に省略しようとすれば文字化け
をして当たり前。
そこで、2バイト文字に対応した文字列を『ここから、ここまで~』と省略してくれる関数を利用すればいいんですね
2バイト文字対応した文字列の省略のPHP関数
mb_substr mb_strimwidth mb_strcut
//substrは2バイト文字非対応 echo substr(strip_tags($post-> post_content), 0, 200) //mb_substrは2バイト文字対応。半角混じっても文字化けせず、1バイトも2バイトも1文字としてカウント echo mb_substr(strip_tags($post-> post_content) , 0 , 200 , "..."); //全角を2バイトとして計算する echo mb_strimwidth(strip_tags($post-> post_content) , 0 , 200 , "..."); //1バイトを一文字として計算 echo mb_strcut(strip_tags($post-> post_content) , 0 , 200 , "...");
それぞれ微妙に出力される文字数に違いがありますが、半角や全角が混じってもそれなりにきれいに整えてくれるmb_strimwidthをオススメしますね。