You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JSON数据转为指定PHP数组格式并解决视图渲染报错

解决Laravel中传递数组到视图引发的htmlspecialchars()错误

首先咱们拆解下你遇到的问题:你从Enom接口拿到XML数据,转成SimpleXMLElement后又转成JSON字符串传到视图,但尝试在控制器里用json_decode得到数组再传递时,触发了htmlspecialchars() expects parameter 1 to be string, array given错误。这是因为Laravel的Blade模板引擎用{{ }}输出变量时,会自动调用htmlspecialchars()转义内容,但这个函数只接受字符串,直接传数组就会报错。

下面给你两种可行的解决方案:

方案1:控制器直接传递数组给视图,视图正确处理数组

不需要通过JSON中转,直接把SimpleXMLElement转成数组后传给视图,再针对性地输出数组内容:

控制器代码修改:

public function test()
{
    $response = file_get_contents('https://resellertest.enom.com/interface.asp?command=gettldlist&uid=resellid&pw=resellpw&responsetype=xml');
    $data = simplexml_load_string($response);
    
    // 将SimpleXMLElement转为关联数组
    $configData = json_decode(json_encode($data), true);
    
    // 传递数组到视图
    return view('clientlayout.main.test1', compact('configData'));
}

视图(Blade)中的正确用法:

不要直接输出整个数组,而是遍历数组或者输出具体的键值对。比如:

{{-- 遍历数组内容(示例结构,需根据实际返回的XML结构调整) --}}
@foreach($configData['TLDList'] as $tld)
    <p>后缀:{{ $tld->Name }} | 类型:{{ $tld->Type }}</p>
@endforeach

{{-- 如果需要查看完整数组结构,用print_r配合pre标签格式化 --}}
<pre>{{ print_r($configData, true) }}</pre>

方案2:传递JSON字符串到视图,在视图内解码使用

如果你更倾向于传递JSON字符串到视图,可以在视图里先解码成数组,再进行操作:

控制器代码(保持你的原有逻辑):

public function test()
{
    $response = file_get_contents('https://resellertest.enom.com/interface.asp?command=gettldlist&uid=resellid&pw=resellpw&responsetype=xml');
    $data = simplexml_load_string($response);
    $configdata = json_encode($data);
    
    return view('clientlayout.main.test1', compact('configdata'));
}

视图(Blade)中的处理:

@php
    // 在视图内解码JSON为数组
    $decodedData = json_decode($configdata, true);
@endphp

{{-- 后续操作和方案1一致,比如遍历 --}}
@foreach($decodedData['TLDList'] as $tld)
    <div>{{ $tld['Name'] }}</div>
@endforeach

额外注意事项

  • 建议替换file_get_contents为更可靠的HTTP客户端(比如Laravel自带的Guzzle),避免出现请求超时或错误无法捕获的问题。
  • 转换后的数组结构取决于Enom接口返回的XML结构,你可以先用dd($configData)在控制器里查看数组的具体层级,再调整视图里的遍历逻辑。

内容的提问来源于stack exchange,提问作者sharmila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:56:03