PHP7とFormDataの組み合わせで文字化け

GLUGの熊谷です。
久々に文字化けに遭遇しました。
データベース・PHP環境共にUTF-8で扱っていましたが、 INSERT または UPDATE をした日本語の内容が文字化けで崩壊しています。 文字化けの内容も、昔よく見たSJISへコード変換ミスの様な化け方ではなく見慣れない文字化けです。
ただし、全ての日本語が文字化けしているのではなく、問題なく扱えているレコードと文字化けしているレコードが混在している状況でした。

文字化けを起こしたと想定される処理を追いかけると、FormDataを利用したAjaxのPOST送信された内容が文字化けを起こしていました。
FormDataはmultipart/form-data形式固定で送信されます。それとPHPのマルチバイト処理の組み合わせで発生です。
開発を行なっているローカル環境で問題が発生しなかったので、PHP側のmbstrting辺りに問題がある事が予測されます。

この辺りの内容でネット情報を追いかけていくと、mbstring.http_inputの存在を多く目にします。
実際に問題が発生しないローカル環境とサーバ環境を比較してみました。

mbstring.http_input = auto
入力されたマルチバイトの処理の設定を行う項目です。 問題が発生したサーバー環境ではauto設定になっていました。
マニュアルhttps://www.php.net/manual/ja/mbstring.configuration.php#ini.mbstring.http-input を参照すると、PHP5.6以降で非推奨となっています。

mbstring.http_input = pass

とする事で無事に解決されました。