Ikeda's Blog

LaravelでFormの入力データから改行が消える件

はじめに

Laravelで、Formから入力したデータを受け取った時に奇妙な動きをしていた。

テキストエリアで、文頭や文末に入れた改行が消えてしまう。

入力値そのままにDBへ入れようとしていた時に発見。
原因の調査と、対策についてをまとめておく。

原因

まあ、ちゃんとドキュメントに記述がありました。
入力のトリムと正規化

リクエストに応じてすべての受信文字列フィールドを自動的にトリミングし、空の文字列フィールドをnullに変換します。

なるほど。

対策

A. 対象外の項目を指定する

\App\Http\Middleware\TrimStrings::classの中に、$except という変数がある。
この中に、トリミングしたくない入力枠のnameを記入する。

B. ミドルウェアを無効にする

すべての入力内容で、トリミングしないようにしてしまう方法。
laravel/app/Http/Kernel.php にある、\App\Http\Middleware\TrimStrings::classをコメントアウトしてしまう。

※空の時にnullになるのが困る場合は、\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::classも。