70214


私は、[Laravel Nova](https://nova.laravel.com/)を使用した開発を進めております。  
直面した問題とは、データベースに保存する際の日本語が文字化けする問題になります。

以下、私の開発環境になります。

  * 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」とします。)

[code]

    php artisan make:model Area --migration
    
[/code]

  3. 「area」のマイグレーションファイルに、4列 (id, name, created_at, updated_at)を追加し、マイグレートします。

  4. Novaの管理画面で使用するモデルリソースを定義します。

[code]

    php artisan nova:resource Area
    
[/code]

  5. Novaのモデルリソースファイルに以下のスクリプトを追加して修正します。

[code]

    public function fields(Request $request){
    　　return [
    　　　ID::make()->sortable(),
    　　　Text::make('Name')
    　　　　->sortable()
    　　　　->rules('required', 'max:24')
    　　];
    }
    
[/code]

  6. Novaの管理画面のインプットフォームから日本語のデータを挿入します。今回はデータとして「北海道」を記述します。[![管理画面より日本語を入力](https://i.stack.imgur.com/4fgYB.png)](https://i.stack.imgur.com/4fgYB.png)

  7. 「Areaを作成」をクリック後、保存されたデータを確認すると文字化けてしまいました。 [![保存されたデータが文字化け](https://i.stack.imgur.com/LL2vk.png)](https://i.stack.imgur.com/LL2vk.png)

以上が、私の直面している問題になります。

参考になる記事をいくつか見つけることができました。例えば「[Laravel 5 Model $cats to array utf-8
JSON_UNESCAPED_UNICODE](https://stackoverflow.com/questions/38241424/laravel-5-model-
cats-to-array-utf-8-json-unescaped-unicode)」です。こちらの記事では、対象のModelに「asJson」
関数を上書きするという記事でしたが、まったく動きませんでした。

他のサイトで掲載されていた記事「[Laravelのjson応答でユニコードのエスケープをやめさせる](https://qiita.com/crhg/items/efbbac09bc4df838f984)」は、とても有効な記事かと実践してみましたが動かず、ミドルウェアを作成して解決する「[[Laravel]
JSONレスポンスのUnicodeエスケープ無効化はミドルウェアで！](https://nextat.co.jp/staff/archives/203)」を実践してもダメでした。

問題の解決は、インプットフォームでPOSTされた日本語を、データベースに保存する際に、Jsonに書き換えられるときのエスケープを止めることにあるような気がしています。ただし、私がLaravelとNovaをまだ理解しきれていない故に、どのファイル、どの関数を修正したら解決できるのかが、今一歩進めていない状況です。

現在、Laravel Novaを導入されている方で、日本語を使用している環境を構築されているか  
方、このような問題をすでに解決されている方がおりましたら、ご教授いただけると幸いです。

何卒よろしくお願い致します。


CC BY-SA 4.0
2020-06-12T09:04:34.110
67576
2020-09-08T00:47:30.117
2020-06-12T12:31:19.763
3060
40614
question
php laravel
Laravel Nova管理パネルのテキストフィールドで「JSON UNESCAPED UNICODE」が機能しないのはなぜですか？


自己解決しました。  
原因は、php.iniの設定項目「mbstring.encoding_translation」によるものでした。  
初期設定では、「On」になっていますが、「Off」にすることで、文字化けを解決することができました。  
JSONの文字化けというより、Formアクションでの文字化けでした。

たわいもないミスで恥ずかしいばかりですが、ここに記します。


CC BY-SA 4.0
2020-09-08T00:47:30.117
70214
2020-09-08T00:47:30.117
40614
67576
answer