この記事を三行にまとめると
どこもおかしくないはずなのに.htaccessでも変更が可能です
なにゆえautoに設定されていたのか……
データベースの照合順序は確かにUTF8になっている。PHP側の設定も問題ない。それなのになぜか日本語を入力するとデータベースに登録される際に文字化けしてしまう。どこもおかしくないはずなのに。
そういう時は、サーバーの設定を見てみると解決するかもしれない。
phpinfo()でmbstringの項目を見ると「mbstring.http_input」というのがあります。この値が「auto」になっていると文字化けすることがあるようです。autoになっているようなら、「pass」に変更することで文字化けしなくなるかもしれません。
php.iniを修正すればオッケーですが、mbstring.http_inputは.htaccessでも変更が可能です。
こんな感じですね。
もしDBには文字化けしていない日本語が入っているのに表示するときになぜか文字化けするってんなら、「mbstring.http_output」をpassにすると解決するかもしれません。
今回の僕はhttp_inputの方がautoになってたので、それをpassに直したら文字化けも直りました。outputは最初からpassになってたのでそっちについては未確認です。
しかしhttp_inputやhttp_outputはデフォルト値がpassらしいんだけど、なにゆえautoに設定されていたのか……謎ですね。
そういう時は、サーバーの設定を見てみると解決するかもしれない。
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に設定されていたのか……謎ですね。