邪魔なだけ、と思うのは私だけなのか?未分類phpの設定で、デフォルトでは「Off」になっている、「mbstring.encoding_translation」。透過的な文字エンコーディングフィルタを有効にします。便利っぽいことが書いてあるけど、まあだいたいの場面において、『自動的に』という処理は罠であることが多い。DBはUTF-8、スクリプトもUTF-8で、サイトのHTMLがShift-JISという、少し特殊な環境のシステムでの改訂作業でのこと。このシステムが稼働するサーバーは、内部文字エンコードがEUC-JPになっていた。最近では珍しいけれど、DBの文字コードとそれを処理・表現するスクリプトの文字コードに齟齬がなければ、基本的に文字化けが起こることはない。HTMLがShift-JISであっても、出力時にShift-JISにコンバートしてやればいいだけだ。内部エンコードの設定はそのままでも全然大丈夫、、、のはず。ところが、このシステムが稼働するサーバーのphp.iniの「mbstring.encoding_translation」がONになっていた。この場合、内部エンコードがEUC-JPなので、送信されたデータはすべてEUC-JPにコンバートされてしまう。うぜぇ・・・PHPには、スクリプト上で文字エンコードの設定を行う関数がいろいろと用意されていて、内部文字エンコードも、スクリプト上で変更することが可能だけども、このencoding_translationというやつ、設定可能箇所が「PHP_INI_PERDIR」なので、スクリプト上での変更ができない。それじゃあ、ということで、mb_internal_encoding()関数で、内部エンコードをUTF-8にしてみたが、全然効き目がない。スクリプトで設定が変更される前に、「mbstring.endocing_translation」によってPOST(またはGET)されたデータのコンバート処理が行われてしまうらしい。当のサーバーはといえば、php.iniの設定変更はもちろんのこと、.htaccessによる変更も許可されていないので、「mbstring.encoding_translation」の設定を変更する手段がない。$qval;}このレンタルサーバー、システムはEUC-JPで作りなさい、といってるようなもんだ。内部エンコードがEUC-JPなのはいい。一昔前に借りたサーバーはだいたいDBも内部エンコードもEUCだし。「mbstring.encoding_translation=On」はよろしくない。スクリプトでハンドリングできない項目で、それを変更する手段を提供してないくせによぉ。あー、愚痴った愚痴った。覚え書き:Androidアプリのビルドエラーと対処法<button>タグのtype属性のデフォルトは「submit」。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。コメントデータの処理方法の詳細はこちらをご覧ください。