はね丸のWEB工房

文字コードEUCで書かれたPHPプログラムをUTF-8へと題して、情報共有をします

はね丸のWEB工房PHP>投稿記事を個別表示

このエントリーをはてなブックマークに追加

ここ2日間ほど、今までに作ったサイトのメンテナンスをしてました。
その中で、文字コードがEUCで書かれたサイトがあり、それをUTF-8へ書き換えを。

PHP4時代の遺産ですね。

ほとんどのプログラムの文字コードは替えていたのですが、あまり力を入れていないサイトが1部EUCで残ってまして。(笑)
今回タイミング的に切替え日和だったので、負の遺産を処分することにしました。

これでEUCとはおさらばです。



スポンサーリンク


今まではデータベースを合わせるのが面倒で、全くスルーしていました。
同じシステムから派生したサイトが11サイトもあるので、修正量が凄いという事もあり…。

ところが1ヶ月ほど前にDBを使用しない修正を加えたため、その面倒な部分が排除されました。
これはUTF-8化するしかないと…。


PHPソースをUTF-8化

PHPソースの文字コードを、まずUTF-8に替えていきます。

エディタで開いて保存し直す…でもよいですが、数が多いと厄介です。
そこで私はこのツールを使いました。

KanjiTranslator

文字コード変換のみのツールですが、複数ファイルを一括で変換できるので、かなり便利です。
ツールのウィンドウ上にファイルをドロップし、文字コードを指定して変換ボタンを押すだけです。

もちろんフリーソフトなので、無料で使えます。


PHPの内部構造のUTF-8対応

プログラムの組み方によって変わるので、こうすべきだっというものは無いのですが、いくつかの観点はあります。

■文字コードを意識するPHP関数の文字コード指定を変更
mb_convert_encodingなどモロ文字コード変換関数や、mb_strimwidthなどの文字コードを意識する関数に指定している文字コードの修正ですね。
大抵「EUC」で検索すれば見つかると思いますが。

外部のWEB APIを使用していると、文字コードをコンバートしている確率が高いでしょう。


■HTMLのヘッダに記述している文字コード指定を変更
metaでCHARSETを明示的に指定している場合、修正を忘れずに。


■DB接続後の文字コード指定を変更、もしくは追加
よくデータベースアクセスで、文字化けに悩まされるケースです。
特に「さくらのレンタルサーバ」は過去にEUCを標準としていたため、互換性の関係から特殊な設定になっていますので、文字化けに遭遇する確率が高いです。

「mysql_query("SET NAMES utf8")」を利用して、明示的に文字コードを指定しましょう。

どこかで脆弱性の関連から「SET NAMES」を使わないほうが良い、というのも見ましたが、レンタルサーバの制限内で対応するのは難しいため、仕方ないと思ってます。


データベース(MySql)のUTF-8対応

SQLでも可能だとは思いますが、ヘタレの私はphpMyAdminで対応します。(笑)

まずデータベースの照合順序の変更から。
変更したいデータベースを選択し、

データベースの照合順序変更

「操作」タブをクリックし、下の方にある「照合順序」でUTF-8を選択、隣の「実行する」ボタンを押してオシマイ。
続いてテーブルを変更します。
変更したいテーブルを選択し、

テーブルの照合順序変更

「操作」タブをクリックし、下の方にある「照合順序」でUTF-8を選択、さらに下の「実行する」ボタンを押します。

これでテーブルのデフォルト値は変更できましたので、新しくカラムを追加する際にはUTF-8が適用されます。
しかし、既存のカラムはEUCのままです。

テーブルのカラムの照合順序変更

そこで「構造」タブをクリックし、替えたいカラムにチェックを入れ、右下の「変更(エンピツのアイコン)」をクリックします。

テーブルのカラムの照合順序変更その2

これで「照合順序」の部分を変更するのですが、明示的にUTF-8を指定するのも面倒ですので、一番上の空白を選びます。
「照合順序」をフォーカスした状態で「Home」キーを押せば、一発で選択できて便利です。

この状態で右下の「保存する」ボタンを押します。
するとテーブルのデフォルトが設定されますので、結果的にUTF-8になるわけです。


正直、今どきこのような作業が必要な人はいないと思いますが、まぁ私の備忘録として。(笑)


スポンサーリンク
hanemaru_comをフォローしましょう このエントリーをはてなブックマークに追加
カテゴリー PHP
キーワード WEBサービス,サイトメンテナンス,文字コード








※コメントは管理人の承認後、表示されます。

コメントを受け付けました。
コメントは管理人の承認後、表示されます。

表示順:新規順 | 投稿順 | 人気順 | 注目順