Laravel - htmlspecialchars() 期望参数 1 是字符串,给定对象

Posted

技术标签:

【中文标题】Laravel - htmlspecialchars() 期望参数 1 是字符串,给定对象【英文标题】:Laravel - htmlspecialchars() expects parameter 1 to be string, object given 【发布时间】:2017-08-30 06:45:55 【问题描述】:

我出现这个错误:

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

我在控制器中使用:

$data = '"pr":"code":"1","ac":[["icon":"web","action":"link","url":"asd"]]'
$newData = json_decode($data);

我将它作为数组发送到视图:'data' => $newData 当我尝试在视图中使用 $data 时,它给了我这个错误

已经尝试使用 $data->ac OR $data['ac'] 但还是一样... 请帮忙?

【问题讨论】:

可以添加视图的代码吗? $data => 就是这样。 json_decode 默认返回一个对象。对数组使用$newData = json_decode($data,TRUE); htmlspecialchars() 期望参数 1 是字符串,给定数组 【参考方案1】:

当您使用刀片回显 $data 时,它会自动转义输出。它只能转义字符串。在您的数据中,$data->ac 是一个数组,$data 是一个对象,两者都不能按原样回显。您需要更具体地说明数据的输出方式。究竟是什么样子完全取决于您要完成的工作。例如,要显示链接,您需要执行 $data->ac[0][0]['url'] (不知道为什么您有两个嵌套数组,但我只是按照您的数据结构)。

@foreach($data->ac['0'] as $link)
    <a href=" $link['url'] ">This is a link</a>
@endforeach

【讨论】:

工作就像一个魅力。谢谢。 我有这个是因为$errors-&gt;get() 正在返回一个数组。切换到$errors-&gt;first() 解决了这个问题。【参考方案2】:

如果您真正的意图是将整个数组从 html 发送到控制器,您可以使用以下代码:

来自blade.php

 <input type="hidden" name="quotation" value=" json_encode($quotation,TRUE)"> 

在控制器中

    public function Get(Request $req) 

    $quotation = array('quotation' => json_decode($req->quotation));

    //or
    
    return view('quotation')->with('quotation',json_decode($req->quotation))



【讨论】:

【参考方案3】:

你可以使用serialize

<input type="hidden" name="quotation[]" value="serialize($quotation)">

但在这种情况下,最好的方法是在刀片中使用 json_encode 方法,在控制器中使用 json_decode

【讨论】:

【参考方案4】:

这是在 laravel 中访问数据的正确方法:

@foreach($data-> ac as $link) 

   $link->url

@endforeach

【讨论】:

【参考方案5】:

尝试在您的收藏中使用json_encode()

https://www.php.net/manual/pt_BR/function.json-encode.php

public static function getTeamMemberInto($user_id)
    
    $team = DB::table('members_team')
                ->join('teams', 'teams.id', '=', 'members_team.teams_id')
                ->join('employees', 'employees.id', '=', 'teams.leader_employees_id')
                ->where('members_team.employees_id', '=', $user_id)
                ->select('*')->first();
    // dd($team);
    if($team)
        return json_encode($team, true);
    else
        return false;
    
                        

【讨论】:

以上是关于Laravel - htmlspecialchars() 期望参数 1 是字符串,给定对象的主要内容,如果未能解决你的问题,请参考以下文章

发送电子邮件时 Laravel htmlspecialchars() 错误

laravel 报错htmlspecialchars() expects parameter 1 to be string, object given

htmlspecialchars() 或 如何以及在何处使用?

laravel 5.7 whereNull

在 Laravel 中打印行数

在Laravel 5.6中重置密码链接