WordPressなど、記事の最初の何文字かを引っ張ると最後の文字が文字化けする件 ITかあさん

ITかあさん

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をオススメしますね。

初夏のJavaScript祭 in サーキュレーションビル ForPro