MySQL4.1系とphpの文字化け問題と泥仕合

試運転

TEST DRIVE

# コメント無用

※ テスト書き込みを再利用してゐます

vine4.0にしてからこっち昨日(の夕方)まではほとんど「何もしていない」環境で動いていて、あんまり望ましい状態でもなかったのでチューニングに入ったわけですが。

予想はしていたんですが、お約束どおりMySQL4.1とmbstringなphpを迂闊に連携させると文字化けして使い物にならない件で泥沼にはまりました。
日本語その他マルチバイトな環境では多分FAQ化してると思うんですが、解消法も運用条件によって (ある程度パターン化してるとはいえ) 星の数ほどあるわけで。
それにしても、テスト環境(京子)で何も起きないものが、本番(つばめ)だと泥沼化するのは一体なぜだ???
# テストでうまくいったからって安易にもと動いてた時の設定ファイルを捨てちゃってたのは内緒です

で、血眼になってGoogle先生と格闘した結果・・・とりあえず関係ありそうなとこは、

php.ini (php4.4.4)

[PHP]
default_charset = EUC-JP

[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = binary
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none


備考
default_charset は EUC-JP にセットしとかないと、xoopsの各種メッセージが化ける。事態の理解と処置に一番時間を費やしたのがその対策だったかもしれない。
全部EUCで動いてれば何も文句は無いんだけど、今EUCで動いてるのはxoopsだけで他はUTF-8だから、それで話が一層ややこしくなるのであった。 😆

my.cnf (mysql4.1.21)

[mysql]
default-character-set = binary

[mysqld]
new
old-passwords
default-character-set = binary
skip-character-set-client-handshake

[client]
default-character-set = binary

[mysqldump]
default-character-set = binary

# たまたま動いただけかも知れず、裏づけや保証は一切無いものと考えられたい


(11/30修正)
ごめんなさい嘘ついてました。
あの php.ini だとxoopsが送るメールの subject (表題) が文字化けします。orz

default_charset = EUC-JP
output_handler = mb_output_handler

[mbstring]
mbstring.detect_order = auto
mbstring.encoding_translation = On
mbstring.func_overload = 0
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.internal_encoding = EUC-JP
mbstring.language = Japanese
mbstring.script_encoding = pass
mbstring.substitute_character = none;

どうもこちらが正解か、それに近っぽいです。


(12/1修正)
ごめんなさいまた嘘ついてました。

default_charset = 

等としてデフォルトの文字コードを指定しないようにしとかないと、あれはEUCでこれはUTF、そっちはSJISなんてチャンポンな環境では更に泥沼にはまるようです。ニホンゴムズカシネ 🙁

MySQL4.1系とphpの文字化け問題と泥仕合」への2件のフィードバック

  1. nrb

    test driveのようなので試しにDSLiteで書き込んでみる。
    どうよ?

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください