こんにちは、WPホームページ研究所の運営サポートチーム(@WP_LABO)です。
本日は覚え書きです。PHPの「substr」で黒いひし形と白いハテナマークが表示される場合の解決方法。
データベースから日本語文字を取得し「substr()」で文字列の長さを制限すると「文字列から文字が切り取られ黒いひし形と白いハテナマーク(�)が置換文字として残る」という現象ですね。
解決方法は以下にまとめましたのでぜひご参考くださいませ。
PHPのsubstr()で黒いひし形と白いハテナが表示される際の改善策
以下が実際に対策済みの分です。タイトルは全文表示にしています。文字化け感がなくなりましたね。
もっともシンプルな解決方法は「substr()」の代わりに「mb_substr()」を使う方法。
前提として日本語は1バイト文字ではありません。しかし「substr()」は1バイト換算で動作するために発生する現象です。1バイト文字でない「マルチバイト文字列」に対応した「mb_substr()」を使えば解決です。
元々の書き方が以下です。マルチバイト文字列には対応していない記述となります。
echo substr()
ちなみに以下が変更前の状態です。
次が「マルチバイト文字列」に対応させた記述方法。
echo mb_substr()
変更した後の状態が以下です。
まとめ
本日は「substr()」での文字化けについて解説させていただきました。
mb_というのがマルチバイトという頭文字です。英語など一般的な1バイト文字では使いませんが、日本語などの環境では1バイトで換算すると文字カウントが正しく動かないことがあります。
英語環境では必要ありませんが、マルチバイト文字列に含まれる言語(日本語等)を保存しているデータベースから情報を取得して表示させる場合は「mb_substr()」が使いやすいです。黒いひし形と白いはてなマークが表示されてお困りという方はぜひご自身の状況に併せてもっとも最適な解決策をお試しくださいませ。
最新式の無料プラグインを事前公開
WordPressは公式サイトに登録済みのプラグインだけで全機能を補足しきれません。当サイトでは使いやすさを追求した魅惑的なプラグインを無料でダウンロードいただけます。運営ホームページのマーケティング力をさらに高めるチャンスです。まずは無料でDLしてお試しくださいませ。
→ 改良されたプラグインを確認する