質問: 私は、Laravel Novaを使用した開発を進めております。 直面した問題とは、データベースに保存する際の日本語が文字化けする問題になります。 以下、私の開発環境になります。 * Laravel 7.14.1 * Nova 3.6.0 * PHP 7.3.11 * MySQL 5.7.22 * Amazon Linux release 2 * Chrome 81.0.4044.138 問題が発生するまでのシナリオは以下になります。 1. データベースの作成 (照合順序 :UTF8mb4 Unicode) 2. モデルとマイグレーションファイルの作成 (テーブル名は「Area」とします。) ``` php artisan make:model Area --migration ``` 3. 「area」のマイグレーションファイルに、4列 (id, name, created_at, updated_at)を追加し、マイグレートします。 4. Novaの管理画面で使用するモデルリソースを定義します。 ``` php artisan nova:resource Area ``` 5. Novaのモデルリソースファイルに以下のスクリプトを追加して修正します。 ``` public function fields(Request $request){ return [ ID::make()->sortable(), Text::make('Name') ->sortable() ->rules('required', 'max:24') ]; } ``` 6. Novaの管理画面のインプットフォームから日本語のデータを挿入します。今回はデータとして「北海道」を記述します。![管理画面より日本語を入力](https://i.stack.imgur.com/4fgYB.png) 7. 「Areaを作成」をクリック後、保存されたデータを確認すると文字化けてしまいました。 ![保存されたデータが文字化け](https://i.stack.imgur.com/LL2vk.png) 以上が、私の直面している問題になります。 参考になる記事をいくつか見つけることができました。例えば「Laravel 5 Model $cats to array utf-8 JSON_UNESCAPED_UNICODE」です。こちらの記事では、対象のModelに「asJson」 関数を上書きするという記事でしたが、まったく動きませんでした。 他のサイトで掲載されていた記事「Laravelのjson応答でユニコードのエスケープをやめさせる」は、とても有効な記事かと実践してみましたが動かず、ミドルウェアを作成して解決する「[Laravel] JSONレスポンスのUnicodeエスケープ無効化はミドルウェアで!」を実践してもダメでした。 問題の解決は、インプットフォームでPOSTされた日本語を、データベースに保存する際に、Jsonに書き換えられるときのエスケープを止めることにあるような気がしています。ただし、私がLaravelとNovaをまだ理解しきれていない故に、どのファイル、どの関数を修正したら解決できるのかが、今一歩進めていない状況です。 現在、Laravel Novaを導入されている方で、日本語を使用している環境を構築されているか 方、このような問題をすでに解決されている方がおりましたら、ご教授いただけると幸いです。 何卒よろしくお願い致します。
回答: 自己解決しました。 原因は、php.iniの設定項目「mbstring.encoding_translation」によるものでした。 初期設定では、「On」になっていますが、「Off」にすることで、文字化けを解決することができました。 JSONの文字化けというより、Formアクションでの文字化けでした。 たわいもないミスで恥ずかしいばかりですが、ここに記します。