UTF-8にしているのに文字化けが直らない場合の解決方法

まっちー

まっちー

通常、DBの設計の際には、照合順序をUTF-8にしておけば何の問題もないと思っていたのだが、CPIというレンタルサーバのDBを扱う際、照合順序も全部ちゃんとUTF-8にしているのに、文字化けが直らないという問題が発生した。原因が全く分からずに、かなりの時間、悪戦苦闘した。正確にいうと、悪戦苦闘していたのは僕じゃなくて先輩プログラマーのヅヤさんがですけど。

で、原因を調べているうちに我流天性さんというサイトに行き当たり、その解決法も書いてあったので参考にさせてもらった。

どうやらあそこは、文字コードのデフォルトの設定がEUC-JPになっているようなので、これをUTF-8に直す必要があるらしい。

それにはまず、CPIのコントロールパネルにあるお客様情報のPHP iniの設定情報の中から、自分の使っているPHPのバージョンと同じphp.iniの情報を表示させ、それをまるごとテキストエディタにコピーする。コピーしたテキストを追っていくとのず~っと下の方に(1170行目あたりかな)こんなようなことが書いてある部分がある。

mbstring.internal_encoding = EUC-JP

mbstring.http_input = auto

mbstring.http_output = pass
 €
 €mbstring.encoding_translation = On
 €
 €mbstring.detect_order = auto

これを以下のように書き換える。

mbstring.internal_encoding = UTF-8

mbstring.http_input = auto

mbstring.encoding_translation = Off

mbstring.http_output = pass

mbstring.detect_order = auto

これをphp.iniという名前で保存して、FTPでアップロードする。場所は我流天性さんに倣って、secureというディレクトリの中に一つ適当なディレクトリを作成して、そこにアップ。

アップできたら、今度は.htaccessというファイルを作成して、以下の文を書く。

suPHP_ConfigPath /usr/home/ユーザーID/secure/作成したディレクトリ/

CakePHPを使っている場合は、webrootディレクトリの中にすでに.htaccessがあるので、そこにでも書き加えてやればいい。

・・・と、こんな感じで文字化け解消の手続きをしたわけなんですが、しかし僕の場合は一向に文字化けが解決しなかった。もともとCPIとかいうレンタルサーバのことはよく分からない上、これ以上の解決策も全く知らなかったので、悪戦苦闘する以外にはどうにもならなかった。

そして最終的に出た結論。

CakePHPではデータベースへの接続を行う際、database.phpにいろいろと書くわけですが

class DATABASE_DONFIG {

 € € € € € var $default = array(

 € € € € € € € € € 'driver' => 'mysql';

 € € € € € € € € € ・・・中略・・・

 € € € € € € € € € 'encoding' => 'utf-8' ←ここ

}

このencodingの部分。一見何の問題もないように見えるけど、実はハイフンを入れて書くのはNGらしい。正しくはutf8と表記しなければならない。初めて知ったよ、そんなこと。

ここを直したら、文字化けも無事に解消しました。でもそのかわりにヅヤ先輩の仕事時間を大幅に奪ってしまいました。さーせん。

しかし、今まではutf-8と書いても文字化けせずに普通に動作していたのだけど、それはどうしてなんだろう。

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

プログラマのまっちーです。酒が大好きです。ある一定量のお酒を飲むと壊れたレディオモードに入り、同じことを繰り返す癖があります。宜しくお願いいたします。

このメンバーの記事をもっと読む
デザイン力×グローバルな開発体制でDXをトータル支援
お問い合わせ 会社概要DL