崖っぷちの男

たぶん技術っぽいネタ。ブログ名が決められない

EUC-JPで作ったPHP + MySQLのスクリプトをUTF-8に直す

最近 PHP + MySQL のちょっとしたスクリプトの全体の文字コードEUC-JP から UTF-8 に変えたのでそのときのことをメモっときます。

データベースを UTF-8

とりあえずデータベースの中身を mysqldump ダンプ。

で CREATE DATABASE のあたりで DB 名と、文字コードを指定
(これまでのデータを上書きするのは何かまずそうなので
別の DB を作ってそっちに UTF-8 のデータをいれる)

CREATE DATABASE hogehoge_utf8 CHARACTER SET utf8; 

して mysql -u user -p < 修正したSQL
とするか mysql クライアントの中で source コマンドを使って SQL 実行。
いずれも必要な権限があるのでエラーが出たらその権限を付与して再挑戦。
権限いじれないなら管理者に相談。


スクリプト側の DB 名の設定も合わせて修正。

スクリプト内で SET NAMES クエリを投げてたらそこも修正。

SET NAMES utf8; 

スクリプトを UTF-8

スクリプトの文字コードをとりあえず UTF-8 に。
JavaScriptSmarty の テンプレートも変換。

Windows の話になりますが以下のフリーソフトで一括変更しました。

•¶ŽšƒR[ƒh•ÏŠ·ƒc[ƒ‹uKanjiTranslatorv(ƒtƒŠ[ƒ\ƒtƒg)

mbstring.http_output

.htaccess あたりで UTF-8 に設定。それが無理なら
PHP ファイル内で変更。

もっと権限があるなら php.ini や httpd.conf を変えてもいいのかも。

mbstring.internal_encoding

.htaccessUTF-8 に設定。
こっちは PHP ファイル内で設定しようとしたらなぜかうまくいかず。

ついでに magic_quotes_gpc

文字コードの変換とは関係ないんですが、
ローカルと本番サーバで円記号をフォームに入力したら、
ローカルでは登録されるのに本番では登録されない、
みたいなことが起きたりしましたが、ここの最後の例のように
get_magic_quotes_gpc() の結果に応じて stripslashes() するしないを
変えるようにしたらOKでした。

ホームページ作成の第一歩【PHP 覚書 予期しないエスケープ文字】


確かこれでOKです。
部内で使ってるちょっとしたシステムでこっそりこれをやったんですが、
まだ問題は起きてないっぽいので大丈夫なはず…