PHPプログラムでブラウザ入力した値が文字化けする
掲載日:2020年12月8日
INFOMARTION > PHPプログラムでブラウザ入力した値が文字化けする
概要
PHPで入力画面から確認画面へ遷移した時に文字化けが発生しました。
フォームに文字を入力し、確認画面へ遷移すると文字化けが発生。入力チェックエラーにより自画面遷移する場合も文字化けが発生。 サーバ構築したてだったので、何かPHPの設定が漏れている気がしたので、その時に調べた内容を記載します。
【入力画面】
【確認画面】
目次
- 原因調査
- 1-1. 画面に表示されるまでの流れの整理
- 1-2. 調査
- まとめ
1. 原因調査
原因調査のため調べた内容は以下の通りです。
1-1. 画面に表示されるまでの流れの整理
画面に表示される流れについてです。
言語問わずですが、文字化けしている場合はどこで文字化けが発生しているか調べるところから実施します。 処理フローとしては、以下の図の通りです。
1-2. 調査
①~⑤までは、文字化けに関係ないので(そもそもまだ入力前なので)問題は⑥~⑪のいずれか。 怪しいのは、⑨のApacheと⑩のPHPでしたが、PHPの処理から解析を開始しました。
まず、PHPの設定(php.ini)を確認。
default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
上記の通りになっており、見た感じ問題なさそう。となると問題はPHPのソースが原因の様、しかし、PHPのソースを見ても問題がありそうな個所を特定できず。。。
もう一度、php.iniに怪しい設定がないか確認したところ、一か所怪しげな設定がありました。
mbstring.http_input = auto
autoとなっているのでUTF-8でエンコードされているかが不明だったので、試しに下記の通りに変更。
mbstring.http_input = UTF-8
無事文字化け解消。この設定はPHPで日本語などのマルチバイト文字列を使う際に必要なmbstringモジュールの設定。受信したhttpリクエストをエンコーディングする設定。
1-2. まとめ
文字化けが発生した際は、まずは処理フローの整理をしてみてください。 そして、PHPで入力画面から確認画面などの画面遷移する際に、文字化けをする場合はphp.iniの以下の設定を疑ってみてください。 初期設定は「auto」になっているので、mbstringを使って日本語(マルチバイト文字列)を処理する際は確認してみてください。
最後までご覧いただきありがとうございました。