ワードプレスサイトが突然文字化けして表示されるようになったというご相談を頂きました事例をご紹介いたします。
クライアント様のご相談内容
クライアント様のご相談は下記のような内容でございました。
***** 10:30
先方より文字化けの修正依頼あり(先方でも当方でも特段作用はしていません)
***** 11:00
文字化けとともに、helpers.phpの355行目がおかしい、とメッセージ出てたので、ネット情報から
foreach ( $editable_roles as $id => $role )
↓
foreach ((array)$editable_roles as $id => $role )
と、記述を変えたら、エラーメッセージは消えたが、文字化けのまま。
***** 11:30
PHPの影響と判断し、バージョンをレンタルサーバー(ASJ)の推奨バージョンに下げたところ、WP非対応の下位バージョンだったためサイトが表示されなくなる((+_+)
そして、PHPのバージョン変更は以後24時間できない仕様のため放置。
***** 11:30
PHPのバージョンを最新の8.1に更新。サイトは表示されるも文字化けのまま。
***** 午後~
ブラウザとサーバーのキャッシュをクリア。
英語ページは無事、日本語部分が文字化けと日本語名をふっている画像が表示されていないなので、ワードプレスと、SQLの文字コードを確認。
どちらもUTF-8だが、SQLが「utf8mb4」になっている。
管理画面も文字化けしていてはログインできないため、プラグインでの対応もできないまま、日が暮れました。
***** 午前
EdgeアドオンのCharsetを使用して、EUC-jpにエンコードすると文字化けが解消されることに気づく。
——-
文字コードが問題なのだろうと、試行錯誤しましたが文字化けは解消されませんでした。
ApacheやMySQLのバージョンが古いことは関係ありますか?
(ASJの管理画面内に簡単にバージョンアップできそうなボタンがないので問い合わ中)
何とか明日中にお助け願います。
ワードプレスの文字化けの解消
ワードプレスに特化していることをうたっていない、マイナーなレンタルサーバーでは、ワードプレスサイトに文字化けが発生することがございます。
この理由は、ワードプレスの文字コードは基本的にはUTF8を想定しているにもかかわらず、レンタルサーバーのデータベースやサーバーの基本文字コードの設定が別のものになっている(EUC JP等)ことがあるからです。
このような場合はwp-config.php に
define( 'DB_CHARSET', 'utf8' ); あるいは define( 'DB_CHARSET', 'utf8mb4' );
と記載したり、php.iniファイルに
default_charset = "UTF-8"
又は
mbstring.http_input = UTF-8 mbstring.encoding_translation = On mbstring.internal_encoding = UTF-8 mbstring.substitute_character = "?" default_charset = UTF-8
と記載したりhtaccessファイルに
php_value mbstring.http_input UTF-8 php_flag mbstring.encoding_translation On php_value mbstring.internal_encoding UTF-8 php_value mbstring.substitute_character "?" php_value default_charset UTF-8
と記載いただくと修正されることがあるものの、サーバーレベルで文字コードを強制している場合はclass-wpdb.php にデータベースの文字コードを切り替えるコードを記載する等の修正が必要な場合ございます。
データベースの文字コードを指定するコードの例
mysqli_query( $databaselink, “SET NAMES utf8” );
WPドクターでは経験豊かなワードプレス技術者が迅速に御社サイトの文字化けを解消いたします。お気軽にご依頼・ご相談お送りください