質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

2回答

4205閲覧

htmlspecialchars() expects parameter 1 to be stringというエラーが表示される

tarofess

総合スコア127

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2018/01/21 12:08

現在Laravelで参考書を見ながらプログラムを組んでいるのですが、下記のエラーが表示されます。
「htmlspecialchars() expects parameter 1 to be string, array given (View: /Applications/MAMP/htdocs/laravelapp/resources/views/hello/index.blade.php)」
プログラムの全体は以下のようになっています。

web.php

php

1Route::get('hello', 'HelloController@index');

HelloController.php

php

1class HelloController extends Controller 2{ 3 public function index() { 4 $data = [ 5 ['name'=>'山田たろう', 'mail'=>'taro@yamada'], 6 ['name'=>'田中はなこ', 'mail'=>'hanako@flower'], 7 ['name'=>'鈴木さちこ', 'mail'=>'sachiko@happy'] 8 ]; 9 return view('hello.index', ['data'=>$data]); 10 } 11}

hello/index.blade.php

php

1@extends('layouts.helloapp') 2 3@section('title', 'Index') 4 5@section('menubar') 6 @parent 7 インデックスページ 8@endsection 9 10@section('content') 11 <p>ここが本文のコンテンツです。</p> 12 13 @each('components.item', $data, 'item') 14 15@endsection 16 17@section('footer') 18copyright 2017 tuyano. 19@endsection

components/item.blade.php

php

1<li>{{$item['name']}} [{{$item['mail']}}]</li>

helloapp.blade.php

php

1<html> 2<head> 3 <title>@yield('title')</title> 4 <style> 5 body { font-size: 16pt; color: #999; margin: 5px; } 6 h1 { font-size: 50pt; text-align: right; color: #f6f6f6; 7 margin: -20px 0px -30px 0px; letter-spacing: -4pt; } 8 ul {font-size: 12pt } 9 hr { margin: 25px 100px; border-top: 1px dashed #ddd; } 10 .menutitle { font-size: 14pt; font-weight: bold; margin: 0px; } 11 .content { margin:10px; } 12 .footer { text-align: right; font-size: 10pt; margin: 10px; 13 border-bottom: solid 1px #ccc; color: #ccc; } 14 </style> 15 <head> 16 <body> 17 <h1>@yield('title')</h1> 18 @section('menubar') 19 <ul> 20 <p class="menutitle">※メニュー</p> 21 <li>@show</li> 22 </ul> 23 <hr size="1"> 24 <div class="content"> 25 @yield('content') 26 </div> 27 <div class="footer"> 28 @yield('footer') 29 </div> 30 </body> 31 </html>

HelloController.phpの$dataの中身を消すとエラーが消えることから、この配列がおかしなことになっていると思うのですが、どこが間違っているでしょうか?
試しに

php

1return view('hello.index', ['data'=>htmlspecialchars($data,ENT_QUOTES,'UTF-8')]);

としてもうまくいきませんでした。
どなたか分かる方がいれば教えていただきたいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2018/01/27 11:50

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
guest

回答2

0

こんにちは。これは掌田津耶乃さんのLaravel入門ですよね。

私も同じエラーがでて、金曜日丸一日悩みまくって、
ググりまくったところ、まさにこの質問に行きつきました。

皆さまのご回答はエラーに対してもっともなことを書かれているのですが、
結果的には何も解決しない回答だと思いました。私もそうでしたから。
質問をクローズされていないのも、そういうことではないでしょうか。

実際には掌田津耶乃さんのコードは間違っていませんでした。

index.blade.phpにエラーがあるとエラーメッセージにあると思います。
一番上の
@extends('layouts.helloapp')
から、
一番下の、
@endsection
までコードを書かれたと思いますが、
その下に以前のコードをコメントアウトで残していませんか?

このコメントアウト内に
{{$data[$counter]}}や
@whileディレクティブが入っていたら、
それはblade内ではコメントと認識しないようです。

私の場合は、それを取っ払うとうまく動きました。
なんでhtmlspecialcharで落ちるのかは解っていませんけど。

次のテーマである「ビューコンポーザーを作る」も、
このコメントアウトしたコードが原因で動きませんでした。
なんでレビューに★5とか★4がついてるんだろう。
この掌田津耶乃の詐欺師ヤロー!!とまで
思っていましたが、そういうことみたいです。

ご参考になさってください。

投稿2018/05/14 03:36

編集2018/05/14 04:31
koujiha0365

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ドキュメントを見る癖をつけな

string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )

これで配列でも大丈夫とどうして思うんだい?

投稿2018/01/21 12:18

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tarofess

2018/01/22 11:57

htmlspecialcharsはstringを返すのか htmlspecialcharsを配列に通すだけじゃダメな理由が分かった
masaya_ohashi

2018/01/24 02:16

全然回答者さんの意図を汲めていませんよ…htmlspecialcharsの第一引数はstring型です。あなたがコードでhtmlspecialcharsに渡している$dataはarray型です。
tarofess

2018/01/27 09:15

勘違いしていました。理解しました。
退会済みユーザー

退会済みユーザー

2018/05/14 03:42

> ドキュメントを見る癖をつけな いや、それ以前に「エラーをちゃんと読むクセ」が必要かと。
koujiha0365

2018/05/14 04:13 編集

これはエラー箇所やドキュメントを見たところで解決しません。@eachディレクティブはこのコーディングで正しいですから、仮にhtmlspecialcharsの引数を見直すアプローチで解決したとしても、それは正しくないということになります。フレームワークはドキュメントを見る癖やエラーを読むクセだけではどうにもならないことがありますね。
退会済みユーザー

退会済みユーザー

2018/05/14 04:12

何を言っているのかよく分からんけど、php がエラー吐いてるんだから、それに応じた対応をすれば良い。 デバッグ環境でも整えていれば、問題箇所にはすぐに辿り着ける。 フレームワークの使用で発生しようが、生 php で発生しようが、エラーはエラーよ^^;
koujiha0365

2018/05/15 02:56 編集

これは掌田津耶乃著のLaravel入門というテキストにある@eachディレクティブを使うというお題のコードです。やった人でないと何を言ってるのか解らないと思います。さらに言うと、テキストをやった人でないと解決できない内容でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問