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

Laravel中PHP二维数组转JS对象遇语法错误,求解决办法

解决Laravel中PHP数组转JavaScript对象的语法错误问题

这个问题我之前也碰到过,核心原因是Blade模板的{{ }}语法会自动转义HTML特殊字符,哪怕你用了html_entity_decode(),也可能因为处理顺序的问题没生效,导致JS解析时遇到被转义的引号(比如")从而抛出语法错误。下面给你几个靠谱的解决思路:

方法1:使用Blade的非转义输出语法{!! !!}

这是最直接的解决方案。Blade的{!! !!}会跳过自动转义,直接输出原始内容。你可以去掉视图里的html_entity_decode(),直接用{!! $data !!}输出JSON字符串:

// 控制器里可以简化,不需要JSON_HEX_QUOT(除非你有特殊的XSS防护需求)
$arr['ping'] = array_values($arr['ping']);
$arr['doc'] = array_values($arr['doc']);
$data = json_encode($arr); // 去掉JSON_HEX_QUOT参数
<script type="text/javascript">
$(document).ready(function() {
    // 用{!! !!}直接输出JSON,JS能直接解析为对象
    app.initChartPingListExpand({!! $data !!}, {{ $maxping }});
});
</script>

⚠️ 注意:确保$data里的内容是可信的(比如没有用户输入的恶意HTML/JS代码),因为{!! !!}不会转义,存在XSS风险。不过json_encode()处理后的JSON字符串本身是安全的,只要原始数组里没有注入恶意内容就没问题。

方法2:直接在视图中转码PHP数组

你甚至可以不用在控制器里提前json_encode(),直接在视图里对PHP数组进行转码并输出:

// 控制器直接把$arr传给视图即可,不用转JSON
return view('your-view', compact('arr', 'maxping'));
<script type="text/javascript">
$(document).ready(function() {
    // 直接在视图里用json_encode转码,并用{!! !!}输出
    app.initChartPingListExpand({!! json_encode($arr) !!}, {{ $maxping }});
});
</script>

这种方式更简洁,减少了控制器里的冗余代码,效果和方法1一致。

方法3:通过HTML data属性传递数据

如果担心直接输出到JS里的安全问题,或者需要更优雅的方式传递数据,可以把JSON数据放到HTML元素的data-*属性中,然后用JS读取并解析:

<!-- 在某个元素上添加data属性,用{{ }}输出JSON(因为data属性里的引号会被转义,但JS读取后可以解析) -->
<div id="chartPingListExpand" class="ct-chart" data-chart-data="{{ $data }}"></div>

<script type="text/javascript">
$(document).ready(function() {
    // 读取data属性并解析为JS对象
    const chartData = JSON.parse($('#chartPingListExpand').data('chart-data'));
    app.initChartPingListExpand(chartData, {{ $maxping }});
});
</script>

这种方式的好处是数据和JS代码分离,而且{{ }}转义后的引号在data属性里是合法的,JS通过JSON.parse()可以正确转换为对象,安全性更高。

为什么你原来的方法会报错?

你用了JSON_HEX_QUOT参数,它会把JSON里的双引号转成\u0022,然后Blade的{{ }}又会把这些内容里的特殊字符转义(比如如果还有其他HTML特殊字符的话),再加上html_entity_decode()的处理顺序不对,最终输出的内容不是JS能直接解析的合法JSON格式,导致语法错误。去掉JSON_HEX_QUOT并使用{!! !!}就能解决这个问题。

内容的提问来源于stack exchange,提问作者Thomas G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:47:53