Windows用XAMPPのUTF-8化
玄箱WEBサーバの確認用であるXAMPPをUTF-8ベースに変更しました。ネットで調べながら、試行錯誤してようやくできましたので、紹介します。恐らく、XAMPPのバージョンが違うと、多少違ってくるかもしれませんので、適宜参考にしてください。私の環境は、OSがWindowsXPで、2007年5月現在の最新版XAMPP1.6.1を使用しています。主なソフトのバージョンは、次の通りです。
- Apache 2.2.4
- PHP 5.2.1
- MySQL 5.0.37
- phpMyAdmin 2.10.02
PHPの設定(php.ini)
まず、php.iniの修正です。このファイルは、デフォルトではC:\xampp\apache\binにあります。「Windows用XAMPP導入」のページでは、EUC-JPやSJISを設定していましたが、これらをUTF-8に入れ替えます。
output_buffering = Off <- 文字コードを統一するならOff
: : 途中略 : :
; PHP's built-in default is text/html
default_mimetype = "text/html"
;default_charset = "iso-8859-1"
default_charset = "UTF-8" <- PHPがhtmlに出力するヘッダコード
: : 途中略 : :
[mbstring]
; language for internal character representation.
mbstring.language = Japanese <- 日本語
; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
;;;mbstring.internal_encoding = EUC-JP
mbstring.internal_encoding = UTF-8 <- 内部コードをUTF-8
; http input encoding.
mbstring.http_input = auto <- 入力を自動判定
; http output encoding. mb_output_handler must be
; registered as output buffer to function
;;;mbstring.http_output = SJIS
mbstring.http_output = UTF-8 <- 出力をUTF-8
; enable automatic encoding translation according to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
; portable libs/applications.
mbstring.encoding_translation = On <- 内部エンコードに従って変換
; automatic encoding detection order.
; auto means
mbstring.detect_order = auto <- 判定順はオート
; substitute_character used when character cannot be converted
; one from another
mbstring.substitute_character = none; <- 変換できないと時の振る舞い
; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
mbstring.func_overload = 0 <- mb系の関数オーバーロードなし
この後、XAMPPコントロールパネルによりApacheを再起動します。そして、XAMPPのローカルホームページ(http://localhost/xampp)の左側にあるphpinfoをクリックし、PHPの環境変数を確認します。例えば、上で設定したmbstringは次のようになっているはずです。

default_charsetも同様にUTF-8であることを確認できます。今回は、C:\xampp\apache\binの下にあるphp.iniを変更しましたが、PHP4に切り替えたりする場合は、C:\xampp\php\php.iniも変えたほうがよいみたです。但し、C:\xampp\phpの下には、それらしいファイルがたくさんあるので、何が何やらよう分かりませんけど。。。。
MySQLの設定(my.cnf)
次は、MySQLの設定です。MySQLはv4.1から文字コードに関係する環境変数が大幅に強化されたようです。そのため、たくさんの変数を変える必要があります。修正するのは、C:\xampp\mysql\bin\my.cnfです。cnfという拡張子は、短縮ダイヤルのファイルとみなされるらしく紛らわしいので、気をつけてください。my.cnfには、[clien]、[mysqld]など、MySQLの機能や操作ごとにいろいろ文字コードを設定できるのですが、全部UTF-8系に変えてしまいます。結局、追加、変更したのは次の通りです。
[client] default-character-set = utf8 [mysqld] ##character-set-server = latin1 ##collation-server = latin1_general_ci default-character-set = utf8 character-set-server = utf8 collation-server = utf8_general_ci init-connect=SET NAMES utf8 skip-character-set-client-handshake [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8
この中で、skip-charcter-set-client-handshakeは、MySQLクライアントなどの文字コードをMySQLサーバ(mysqld)で設定した文字コードに、無理やり統一するものです。私の環境では、skip-character-set-client-handshakeを記述しないと、character set client等の一部の変数がLatin1(欧米か!)のままで、UTF-8になりませんでした。理由は分かりません。この辺りのMySQL文字コードに関する設定は、次のホームページにも詳しく載っていますので、参考にしてください。
MySQLAdminの設定(my.ini)
上で述べたmy.cnfで、skip-character-set-client-handshakeを記述したならば、やる必要はないですが、クライアントの文字コード「character set client」の設定はmy.iniファイルで行うことができましたので、簡単に紹介します。my.iniは、XAMPPコントロールパネルのMySQLの管理ツールから編集することができますが、ファイル自体はC:\WINDOWS\my.iniですので、これを直接編集しても構いません。私の場合、次のように追加すると、「character set client」もUTF-8にすることができました。
[WinMySQLAdmin] Server=c:/xampp/mysql/bin/mysqld-nt.exe [client] <- 追加 default-character-set=utf8 <- 追加
このmy.iniですが、一応、winmysqladmin.exeの設定ファイルのようです。my.iniかmy.cnfのいずれかに設定すればいいようなのですが、[clien]に関しては、なぜかmy.iniでしかうまく設定できませんでした。
phpMyAdminの設定(config.inc.php)
MySQLで日本語のデータを正しく格納、表示できるかを確認するために、phpMyAdminも設定します。Windowsの場合、DOS窓のMySQLコマンドで確認しようとすると、SJISしかまともに表示してくれませんので、phpMyAdminを使います。設定は、C:\xampp\phpMyAdmin\config.inc.phpで、次のようにします。
/** * Language and charset conversion settings */ // Default language to use, if not browser-defined or user-defined $cfg['DefaultLang'] = 'en-utf-8'; <- 最初からこうなっていた // Force: always use this language - must be defined in // libraries/select_lang.lib.php // $cfg['Lang'] = 'en-utf-8'; // Regullar expression to limit listed languages, eg. ... // English only $cfg['FilterLanguages'] = ''; <- 最初からこうなっていた // Default charset to use for recoding of MySQL queries, does not take // any effect when charsets recoding is switched off by // $cfg['AllowAnywhereRecoding'] or in language file // (see $cfg['AvailableCharsets'] to possible choices, you can ... //$cfg['DefaultCharset'] = 'iso-8859-1'; <- コメントアウト $cfg['DefaultCharset'] = 'utf-8'; <- 追加 $cfg['DefaultConnectionCollation'] = 'utf8_general_ci'; <- 追加
実際に変更/追加したのは、$cfg['DefaultCharset']と$cfg['DefaultConnectionCollation']だけです。この後、XAMPPのコントロールパネルでMySQLやApacheを再起動し、phpMyAdminで環境変数を見ると、次のようになりました。

どうやら、config.inc.phpに設定した$cfg['DefaultConnectionCollation']は、全然効果がないみたいで、utf8_unicode_ciがデフォルトになってしまいます。一応、phpMyAdminの先頭ページにある「MySQLの接続照合順序」をutf8_general_ciに変更すれば、完全に一致させることができます。phpMyAdminで次のような日本語のデータベースをテスト的に作成しましたが、utf8_unicode_ciのままでも特に問題なく検索や表示ができたので、放置しています。実際、私には、utf8_unicode_ciとutf8_general_ciの違いはよく分かっていません。。。。

<meta>タグの設定
サーバ側の設定はほぼ完了したので、全ページをUTF-8、改行はLFに変換しました。私は、普段ホームページビルダー(以後、HPB)を使用しており、これは、デフォルトで、次のような<meta>タグを出力します。
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
これまで、SHIFT-JISで編集していたため、charsetがShift_JISになっています。そのため、次のように、Shift_JISの部分をUTF-8に変更します。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
こうしないと、HPBで読み込むときに文字化けしてしまいます。この辺りの文字コードや改行の設定、<meta>タグ出力のオンオフ等は、HPBの「ツール」→「オプション」→「ファイル」で変更できます。私の場合、改行は「LF」、出力漢字コードは「UTF-8」にしました。
長い説明でしたが、これで終わりです。玄箱の環境も、UTF-8に統一したので、それも次に紹介する予定です。
最新の7件
OpenGL
電子工作
玄箱HG
- ClamAVのアップデート
- Smartyも入れてみる
- etchでPHP4->PHP5
- etchでのSamba設定
- etchでのメール設定
- 玄箱HGのetch化
- Webdruidでログ解析
- PEARも入れてみる
- 玄箱WEBのUTF-8化
- phpMyAdminでMySQL
- postmasterの変更
- ウィルスメール対策
- SPAMメール対策
- メールサーバ(IMAP)
- メールサーバ(Postfix)
- 猫にXOOPS
- PHPも入れてみる
- MySQLを入れてみる
- Subversion導入
- WebDav導入
- Apacheのrewrite機能
- Apacheディレクトリ設定
- Apache1.3->2.0
- ddclientの設定
- 静かな玄箱
- ユーザ追加