necotech blog

mbstring.encoding_translationが切れない場合の最終手段

mbstring.encoding_translationという、HTTPクエリ($_GETとか$_POSTの中身)の文字エンコーディングを自動で変換する機能があるが、古いサーバでこれがOnになっていてEUC-JPが基準になっていると、UTF-8を基準としている昨今では非常に困ることがある。といってもこれをOffにすればいいだけなのだが、php.iniが触れない、.htaccessも満足に利用できない古いサーバにぶち当たり、設定が変更できないことがあった。

そこで思いついた回避策が、勝手に変換されるならもう一回変換してやろうじゃないか、というものだ。やっていることはすごく単純だけど、設定だけに気を取られているとなかなか気づけないかもしれない。
でも行儀のいい方法ではないので最終手段ということで。

foreach($_POST as $k => $v){
  $_POST[$k] = mb_convert_encoding($v, "UTF-8", "EUC-JP")
}

そもそも古いサーバが〜とか、PHPのバージョンが〜とか、セキュリティ的に〜とかは制作現場としては理想論でしかないこともあるので、泣く泣く対処をする日々。

※配列は考慮していません。

Share on Facebook
Share on LinkedIn
Pocket