Laravelエラー:htmlspecialchars() expects parameter 1 to be string は配列を文字列にして解決

Laravel・PHP豆知識・トラブル対策

このエラーは「文字列が入るべきところに、配列が受け渡されている」という意味。配列から値を取り出してあげれば、エラーを解決できます。

実際のコードを使って、どのように処理を行うか解説していきますね。

【エラーメッセージ】

htmlspecialchars() expects parameter 1 to be string, array given

Laravelのhtmlspecialchars() expects parameter 1 to be string エラー前提条件

まずは前提条件から説明していきますね。次のようにコントローラーを書いて配列を$menuに代入し、ビューファイルに受け渡したとします。

なお今回はテストのために、分かりやすく配列を使って、変数を定義しています。

【コントローラー】

ビューファイルは次のように表示します。

【ビューファイル(array.blade.php)】

するとここで、エラーが発生します。

エラーを直訳すると、「htmlspecialchars()はパラメータ1が文字列であるところ、配列が与えられています。」といった意味です。

laravel では、 {{ }} を使って変数を表示するとき、 変数がhtmlspecialchars でエスケープ処理されます。

このとき、変数がstring(文字列)である必要があり、array(配列)が受け渡されると処理できません。配列が渡されると、このようなエラーが表示されます。

Junko
Junko

「エスケープ処理って?」と思ったら、下記の記事で分かりやすく解説しているので、併せて読んでくださいね。

Laravelのhtmlspecialchars() expects parameter 1 to be string エラーの解決3ステップ

解決策としては、配列→文字列にして表示することになります。

状況によって色々と方法がありますが、今回はarray_column関数を使って処理していきましょう。

ステップ①取り出したい値の場所をチェック

まずは表示したい値がどのような状態になっているのか、チェックしましょう。

コントローラーの変数を定義した後にdd(変数名)を挿入します。

【コントローラーにddを入れた例】

こうすると、次のように$menuの値がブラウザに表示されます。この時点で、配列であることが分かりますね。

Junko
Junko

ddを使うと、変数の内容を表示できるので、とっても便利です♪

ステップ②コントローラーで表示したい値だけ取り出す

次に配列を文字列にしていきます。今回は、$menuの中のcolor値を表示したいとします。

普通にとりだすには、コントローラに下記を加えます。

【コード追加後のコントローラ】

他にもarray_column関数を使ったコードを使う方法もあります。

array_column関数を使うと、配列の中から、単一のカラムの値を取り出せます。

array_column : 入力配列から単一のカラムの値を返す

コントローラーのメソッド全体は、次のようになります。

【array_column追加後のコントローラ】

ステップ③ビューファイルで表示

最後にビューファイルを編集します。コントローラーから受け渡された変数$menuには、salad, main, dessertのcolorが格納されています。

値をひとつずつ表示するために、foreachを使っていきます。

【ビューファイル(array.blade.php)】

ブラウザには、次のようにcolorが表示されます。

もっと込み入った多次元配列の場合は、もう一工夫必要です。

もっと込み入った配列の場合には、もう少し工夫が必要です。

たとえば、次のような配列であったとしましょう。

この配列から ‘tomate’キーの値を取り出すには、コントローラに下記を加えます。

【コード追加後のコントローラ】

array_columnを使う場合は、こちらを入れます。

【array_column追加後のコントローラ】

ビューファイルは先ほどと同じです。

これによって、ブラウザにtomateキーの値だけ表示できます。

さいごに

配列の値を取り出してエラーを解決する方法を紹介しました。

あなたのエラー解決に役立てば嬉しいです。

Laravel・PHP豆知識・トラブル対策

【Laravelの教科書・無料プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック
【個別サポート実施中】

「本ブログに記載の方法を試してみたけれど、うまくいかない」「コードを見てほしい」という方のために、有償でメールサポートいたします。以下のボタンをクリックして相談フォームにアクセスして下さい。

詳しく見る

Twitter始めました。
40代からプログラミング!

コメント

タイトルとURLをコピーしました