Contents Management System

concrete5サイトが突然の文字化け!データベース設定で回避

DBconcrete5

突然、昔納品したconcrete5がサイトが文字化けしました。データベースを読み込む際のOption設定で文字化けを回避できるのでそのやり方についてご紹介します

この記事を書いた人

かみーゆ/フロントエンドエンジニア

セブ島在住の気ままな海外ノマドエンジニア。IT業界10年。テクニカルディレクター・エンジニア講師・ブリッジSEを経て今に至る。CMS concrete5エバンジェリスト。テックブログ以外も「磨耗しない人生の選択」や「海外生活」のライフスタイルについて発信。好きなものは肉とビール。

Read More

concrete5の設定で気をつけること

concrete5では、あらかじめphp.iniや.htaccessで文字コードをUTF-8に設定しておくのは必須です。データベースもutf8generalciで新規作成します。これをしておかないとインストール時にカオスになることも。。。

レンサバなどで簡単インストールなどが付いている場合はそっちでやったほうが失敗は少ないのでおすすめです。

concrete5インストールまでの準備

突然の文字化け

今回は、X-serverに実装しているconcrete5サイトが文字化けしてしまいました。それまでは通常通り見れていました。sqlデータ落としてファイル開いてみたけど異常なし。

X-serverはCGI版でphp.iniを変更することができます。

サーバー内を確認すると.htaccessとphp.iniが更新されている形跡が。。。エンコードもなぜかEUCになっておりなぜこんなことになったのかが分からず、とりあえずUTF-8に変えて更新。それでも相変わらず文字化けが直らない。

うちの会社で運用しているサイトではないですが、とても付き合いの長い方のお客様だったので早く解決してあげたいし、原因は分からないし途方に暮れていると、concrete5側でデータベース設定ができることを思い出しました。

concrete5側でデータベースのdriverOptionsを修正

concrete5にはapplication/config/内にdatabase.phpというファイルがあり、ここにデータベースの設定があります。ここでMySQLを読み込むドライバーのオプション設定を変えることができます。

MySQLとPDOの組み合わせでcharsetを指定する

concrete5でのデフォルトのドライバーはPDOが指定されてます。以下のコードを追加します。

'driverOptions' => array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')

MYSQLATTRINIT_COMMANDの文字コードをutf8にセット。場合によってはutf8だけでいい場合も。

まずはMySQLの文字コードをよく確認してみてください。

とりあえずは一件落着

最近、大きなアップデートがあったことで思い当たる節は、WAFに対応?PHPのバージョン?結局、なんで急に文字化けしたのかは分からないです。。。。

もしみなさんも困った時はやってみてください。

「銀ねこアトリエ」のブログを定期購読しよう

Feedlyに登録する