文字コードEUCで書かれたPHPプログラムをUTF-8へと題して、情報共有をします
ここ2日間ほど、今までに作ったサイトのメンテナンスをしてました。
その中で、文字コードがEUCで書かれたサイトがあり、それをUTF-8へ書き換えを。
PHP4時代の遺産ですね。
ほとんどのプログラムの文字コードは替えていたのですが、あまり力を入れていないサイトが1部EUCで残ってまして。(笑)
今回タイミング的に切替え日和だったので、負の遺産を処分することにしました。
これでEUCとはおさらばです。
今まではデータベースを合わせるのが面倒で、全くスルーしていました。
同じシステムから派生したサイトが11サイトもあるので、修正量が凄いという事もあり…。
ところが1ヶ月ほど前にDBを使用しない修正を加えたため、その面倒な部分が排除されました。
これはUTF-8化するしかないと…。
PHPソースの文字コードを、まずUTF-8に替えていきます。
エディタで開いて保存し直す…でもよいですが、数が多いと厄介です。
そこで私はこのツールを使いました。
KanjiTranslator
文字コード変換のみのツールですが、複数ファイルを一括で変換できるので、かなり便利です。
ツールのウィンドウ上にファイルをドロップし、文字コードを指定して変換ボタンを押すだけです。
もちろんフリーソフトなので、無料で使えます。
プログラムの組み方によって変わるので、こうすべきだっというものは無いのですが、いくつかの観点はあります。
■文字コードを意識するPHP関数の文字コード指定を変更
mb_convert_encodingなどモロ文字コード変換関数や、mb_strimwidthなどの文字コードを意識する関数に指定している文字コードの修正ですね。
大抵「EUC」で検索すれば見つかると思いますが。
外部のWEB APIを使用していると、文字コードをコンバートしている確率が高いでしょう。
■HTMLのヘッダに記述している文字コード指定を変更
metaでCHARSETを明示的に指定している場合、修正を忘れずに。
■DB接続後の文字コード指定を変更、もしくは追加
よくデータベースアクセスで、文字化けに悩まされるケースです。
特に「さくらのレンタルサーバ」は過去にEUCを標準としていたため、互換性の関係から特殊な設定になっていますので、文字化けに遭遇する確率が高いです。
「mysql_query("SET NAMES utf8")」を利用して、明示的に文字コードを指定しましょう。
どこかで脆弱性の関連から「SET NAMES」を使わないほうが良い、というのも見ましたが、レンタルサーバの制限内で対応するのは難しいため、仕方ないと思ってます。
SQLでも可能だとは思いますが、ヘタレの私はphpMyAdminで対応します。(笑)
まずデータベースの照合順序の変更から。
変更したいデータベースを選択し、
「操作」タブをクリックし、下の方にある「照合順序」でUTF-8を選択、隣の「実行する」ボタンを押してオシマイ。
続いてテーブルを変更します。
変更したいテーブルを選択し、
「操作」タブをクリックし、下の方にある「照合順序」でUTF-8を選択、さらに下の「実行する」ボタンを押します。
これでテーブルのデフォルト値は変更できましたので、新しくカラムを追加する際にはUTF-8が適用されます。
しかし、既存のカラムはEUCのままです。
そこで「構造」タブをクリックし、替えたいカラムにチェックを入れ、右下の「変更(エンピツのアイコン)」をクリックします。
これで「照合順序」の部分を変更するのですが、明示的にUTF-8を指定するのも面倒ですので、一番上の空白を選びます。
「照合順序」をフォーカスした状態で「Home」キーを押せば、一発で選択できて便利です。
この状態で右下の「保存する」ボタンを押します。
するとテーブルのデフォルトが設定されますので、結果的にUTF-8になるわけです。
正直、今どきこのような作業が必要な人はいないと思いますが、まぁ私の備忘録として。(笑)
Tweet | ||
カテゴリー | : | PHP |
キーワード | : | WEBサービス,サイトメンテナンス,文字コード |
コメントを記入する
コメントを受け付けました。
コメントは管理人の承認後、表示されます。