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

Laravel中htmlspecialchars()接收数组报错,控制器日期数组传Blade视图怎么解决

报错原因

出现htmlspecialchars() expects parameter 1 to be string, array given报错的核心逻辑是:Blade模板的{{ }}输出语法默认会对内容做HTML安全转义,该转义函数仅支持字符串类型参数,你直接传入数组$dates就会触发类型不匹配错误。

解决方案
  • 首先将PHP数组转换为JS可直接识别的JSON结构,不要用{{ }}加引号包裹的方式输出数组,改用Laravel自带的@json Blade指令输出即可。
  • 额外需要注意格式匹配问题:你返回的$dates数组中的日期是带前导零的格式(如01-10-2021),但JS原生的getDate()、getMonth()方法返回小于10的数字时不会带前导零,会导致匹配失效,需要补全前导零处理。
修改后可直接运行的代码
<script type="text/javascript">
    // 直接通过@json指令将PHP数组转为JS数组
    let checkInn = @json($dates);
    $('.datepicker').datepicker({
        format: 'mm/dd/yyyy',
        beforeShowDay: function(date) {
            // 补全前导零,和后端返回的日期格式对齐
            const day = String(date.getDate()).padStart(2, '0');
            const month = String(date.getMonth() + 1).padStart(2, '0');
            const dmy = day + "-" + month + "-" + date.getFullYear();
            return checkInn.indexOf(dmy) === -1;
        }
    });
</script>
兼容低版本Laravel的替代写法

如果你的Laravel版本低于5.5,不支持@json指令,可以替换为原生PHP转义写法:

let checkInn = {!! json_encode($dates) !!};

注意必须使用不需要HTML转义的{!! !!}语法,也不要额外加引号包裹,否则会得到字符串类型的JSON内容,无法直接调用数组方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:15:04