ホーム > 投稿記事 > PHPでPOSTすると文字化けする原因2つ

PHPでPOSTすると文字化けする原因2つ

投稿日 : 2017年03月02日   更新日 : 2019年10月04日
カテゴリー : WordPress
PHPでPOSTすると文字化けする原因2つの画像

こんにちわ、PHPエンジニアのエンジニア婦人(@naho_osada)です。
私はPHPエンジニアとして6年~の経験があります。WordPressは2年~の経験があります。
ここでは主に過去に納品した案件や自サイト運営(エンジニア婦人ノート)で遭遇したことについて書いています。

Webで動くものを作っていて、欠かせない処理が「POST」。ユーザー登録やお問い合わせで日々使うものですね。

一見基本で簡単なようですが、これには大きな落とし穴が潜んでいることも…。

もしちゃんと作ったのに、環境によって動かない、正しい内容で送信されない!といったときには「自動エンコーティング設定」と「formのenctype」を疑ってみてください。

POST送信すると文字化けする

これは自分のローカル環境で作ったフォームが、テストしても特に問題なくPOSTできたのに、稼働中のサーバーにあげたらできなくなった、という話です。

POSTしたものが文字化けしてしまいました。

「自動エンコーティング」の設定

php.iniの設定で、「mbstring.encoding_translation」が「on」になっていると、自動でエンコーディング変換が走ります。

単純な話、これを「off」にしてやれば解決ですが、他人様のサーバーだから勝手にいじれるわけもありません…

他にもこの現象に嵌った方はいるようです。

mbstring.encoding_translation 邪魔なだけ、と思うのは私だけなのか?|ぼらこみゅ

すごい状況下もあるものです…

ただ、内部文字エンコードはUTF-8だったので、完全に上記の例に当てはまっていたわけではありませんでした。

じゃあ一体なんなのか?と更に調べていきます…

※php.iniはphpinfo();を書いたPHPファイルを確認したいサーバーに置いて、ブラウザで実行するとその内容を見れるようになります。

最終的な解決の糸口

enctype=”multipart/form-data”を指定するとHTTP入力の自動エンコーディング変換で失敗してしまう

PHPのマルチバイトにおけるトラブルシューティング

私が陥ったケースでは、画像等の添付送信がないのにこの記述をしていました。そのため、この記述を削除して解決しました。

画像などの添付送信もないのになんでenctype=”multipart/form-data”なんて書いていたのよ、と言いますと、このときはWordPressプラグインによるフォーム機能を使っていたので自分で記述していたわけではなく、プログラム側で自動生成する際にこの記述が必ず入るようになっていました。

ちなみに上記サイトではonにしておきましょう、っていう感じですが、最近は「mbstring.encoding_translation」の設定はoffにしておきましょうっていう流れのようですね。

だって文字コードが自動変換かけられたらこっちはたまらないよ…こっちではどうにもならないってことでしょう?

まとめ

  • フォームが環境によって正常に動かないときは、サーバーの自動エンコーディング設定を疑ってみよう
  • formのenctypeが要望に一致したものになっているか、確認しよう

開発環境では動いていたのに、本番環境に適用したらうまくいかない、というのはよくある話です。もし遭遇してしまったら、サーバーの環境やソースに不要な記述をしていないかを確認してみてください。

楽しい物造りを

NaoLight

自分のブログやサイトを、楽しく作ってもらえたら。

プログラムを使って望み通りに、拡張しやすく、自分の思うように。

できたときに、すごく楽しい!と思ったら。

控えめに言って、「最高です」。

NaoLight -NAOT-(なおらいと、なおと、と呼んでください)はそんな思いをカタチにする、WordPressのテーマです。

ご購入はこちらからお願いします(BOOTHへ移動します)。

Nao Light-NAOT-公式サイト



この記事にコメントする

入力エリアすべてが必須項目です。承認制のため、表示までに時間がかかる場合があります。

CAPTCHA


内容を確認の上、コメントをお願いします。