玄箱WEBサーバのUTF-8化
掲示板を作成するために、MySQLを使用しようとしたら、やはり文字化けが発生していたので、玄箱WEBサーバのLAMP(Apache2.0、PHP4、MySQL4.1)を完全にUTF-8化しました。これまで、漢字コードはいい加減な設定でしたが、これを機にすべて修正しました。UTF-8に統一した理由は、もともと玄箱Debianの漢字コードをUTF-8に設定したためです。EUCでも良かったのですが、これからはUTF-8かな?と思ったからです。で、私の環境ですが、次の通りです。2007年5月現在、aptitudeで取得できる安定版の最新バージョンのはずです。
- Debian Sarge/ Kernel 2.6.20 ※270氏作成のもの
- Apache 2.0.54
- php 4.3.10
- MySQL 4.1.11
- phpMyAdmin 2.6.2
Windows用XAMPPと各ソフトのバージョンは違いますが、変更した内容は、「Windows用XAMPPのUTF-8化」とほとんど同じです。
PHPの設定(php.ini)
まず、php.iniの修正です。このファイルは、/etc/php4/apache2の下にあります。「PHPも入れてみる」を書いた頃は、何も分かっておらず、default_charsetだけEUC-JPにしていましたが、これらを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
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
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 accoding 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 = Off
mbstring.encoding_translation = On <- 内部エンコードに従って変換
; automatic encoding detection order.
; auto means
;mbstring.detect_order = auto
mbstring.detect_order = auto <- 判定順はオート
; substitute_character used when character cannot be converted
; one from another
;mbstring.substitute_character = none;
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系の関数オーバーロードなし
この後、次のコマンドでApache2を再起動します。
/etc/init.d/apache2 restart
そして、次のことが書かれたphpinfo.phpというファイルをhttp://玄箱のIPアドレス/phpinfo.phpでアクセスします。
<?php phpinfo() ?>
すると、上で設定した内容が反映されているはずです。


この辺りは、釣ったよ!さんのページに分かりやすく書いてあります。私は、そのページにあるテスト用のスクリプト(phpファイル)をUTF-8に変換して試しました。もちろん、上の設定で正しく動いていることを確認しました。
MySQLの設定(my.cnf)
玄箱のMySQLもv4.1以上なので、XAMPPの設定同様、文字コードに関係する環境変数がたくさんあります。但し、XAMPPと違って、/etc/mysql/my.cnfだけですんなり設定できました。追加・変更したのは次の通りです。
[client] default-character-set = utf8 [mysqld] 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を再起動します。
# /etc/init.d/mysql restart
正しく動作するかの確認ですが、次のように、MySQLコマンドで、各変数が設定されていれば、OKです。
# mysql -u root -p Enter password: mysql> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 7 rows in set (0.00 sec) mysql> show variables like 'coll%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+ 3 rows in set (0.00 sec) mysql>
また、手元にMySQLのダンプファイル(EUC-JP形式)があったので、これをUTF-8に変換し、ファイルdump_utf8.txtとしてを読み込ませ、select命令で、文字化けせずに表示されることを確認しました。
#mysql -u root -p <データベース名> < dump_utf8.txt Enter password: mysql> use <データベース名>; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select * from <テーブル名>; ***** ここに、日本語のデータベースが表示される **** mysql>
phpMyAdminの設定(config.inc.php)
玄箱のphpMyAdminの設定ファイルは、/etc/phpmyadmin./config.inc.phpですが、XAMPPのような設定箇所がなかったので、特に何も変更しませんでした。それでも、問題なく日本語のデータベースの作成、検索、表示ができました。

ホームページビルダーのための設定
結局、一番ハマッタのがホームページビルダーv11(以後、HPB)の編集画面でうまく表示させるための設定でした。まず、UTF-8に移行するために、全ページをUTF-8、改行はLFに変換し、次のように<meta>タグをUTF-8に変更しました。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
この後気付いたのですが、SJISとUTF-8では、同じマシン(WindowsXP)、同じブラウザ(IE6)で見ても、欧米フォントが異なることに気付きました。なんじゃそりゃ?です。ネットで調べると、同じような人がたくさんいて、解決策としては、次のようなfont-familyを設定すればいいのですが、スタイルシートファイル*.cssに設定しても、HPBがうまく読み取ってくれませんでした。
body{
font-family : "MS Pゴシック",sans-serif;
}
編集画面の文字がカッコ悪いフォントになり、文字幅もブラウザで見たときと大きく変わってしまいました。HPBの一番の利点はWYSIWYGなので、これでは台無しです。もしかしたら、UTF-8に変えたので、日本語名フォントがよくないのかな?と思い、次のような英語表記にしましたが、これも駄目でした。
body{
font-family : "MS PGothic",sans-serif;
}
どうやら、HPBはスタイルシートにあるfont-familyをうまく読み取ってくれないようです。悩んだ挙句、結局、全ファイルに次のようなスタイルを埋め込むことで、うまくいきました。
<style type="text/css">
<!-- DIV{font-family : "MS Pゴシック",sans-serif;} -->
</style>
う~ん。ほとんどスタイルシートの意味ないじゃん!IBMさん、なんとかして。そもそも、漢字コードが違うだけで、表示が違ってしまうIEも何とかしてほしいです、マイクロソフトさん。最後は愚痴になってしまいましたが、これで完全にUTF-8に移行できました。一応、Fedora6のFireFoxでも確認しましたが、これまで通り文字化けせずに表示されているので、大丈夫だと思います。
最新の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の設定
- 静かな玄箱
- ユーザ追加