文字化けが直らない時に疑うためのその1

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
これは文字化けじゃなくてお化け

この記事を三行にまとめると

どこもおかしくないはずなのに
.htaccessでも変更が可能です
なにゆえautoに設定されていたのか……
データベースの照合順序は確かにUTF8になっている。PHP側の設定も問題ない。それなのになぜか日本語を入力するとデータベースに登録される際に文字化けしてしまう。どこもおかしくないはずなのに。

そういう時は、サーバーの設定を見てみると解決するかもしれない。

phpinfo()でmbstringの項目を見ると「mbstring.http_input」というのがあります。この値が「auto」になっていると文字化けすることがあるようです。autoになっているようなら、「pass」に変更することで文字化けしなくなるかもしれません。

php.iniを修正すればオッケーですが、mbstring.http_inputは.htaccessでも変更が可能です。

php_value mbstring.http_input pass

こんな感じですね。

もしDBには文字化けしていない日本語が入っているのに表示するときになぜか文字化けするってんなら、「mbstring.http_output」をpassにすると解決するかもしれません。

今回の僕はhttp_inputの方がautoになってたので、それをpassに直したら文字化けも直りました。outputは最初からpassになってたのでそっちについては未確認です。

しかしhttp_inputやhttp_outputはデフォルト値がpassらしいんだけど、なにゆえautoに設定されていたのか……謎ですね。
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください