Laravel中htmlspecialchars()接收数组报错,控制器日期数组传Blade视图怎么解决
报错原因
出现
htmlspecialchars() expects parameter 1 to be string, array given报错的核心逻辑是:Blade模板的{{ }}输出语法默认会对内容做HTML安全转义,该转义函数仅支持字符串类型参数,你直接传入数组$dates就会触发类型不匹配错误。
解决方案
- 首先将PHP数组转换为JS可直接识别的JSON结构,不要用
{{ }}加引号包裹的方式输出数组,改用Laravel自带的@jsonBlade指令输出即可。 - 额外需要注意格式匹配问题:你返回的
$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
相关产品推荐
相关产品推荐

