Laravel控制器返回数组变量到视图时出现htmlspecialchars报错求助
解决Laravel视图中数组传递到JavaScript的报错问题
嘿,我来帮你搞定这个报错!你遇到的htmlspecialchars() expects parameter 1 to be string, array given问题,根源是Blade的{{ }}语法不能直接输出数组到JavaScript里。
为什么会报错?
你在控制器里传递的$colors是一个数组,但在Blade中用"{{$colors}}"时,{{ }}会自动调用htmlspecialchars()函数来转义内容,而这个函数只接受字符串类型的参数,直接传数组自然就报错了。而且就算不报错,PHP把数组转成字符串只会输出Array,这也不是你想要的JS数组。
正确的解决方法
这里有两个简单好用的方案:
方案1:使用Laravel内置的@json指令(推荐)
Laravel专门提供了@json指令来处理这种把后端变量转成合法JS数据的场景,它会自动帮你完成JSON编码和正确的转义:
<script> var colors = @json($colors); </script>
方案2:手动用json_encode配合无转义输出{!! !!}
如果你的Laravel版本偏旧,也可以用json_encode把数组转成JSON字符串,再用{!! !!}来输出({!! !!}不会对内容进行HTML转义,而JSON格式的字符串在JS里是合法的):
<script> var colors = {!! json_encode($colors) !!}; </script>
效果验证
这两种方法都会把你的['dummy1','dummy2','dummy3']数组转成JS里的["dummy1","dummy2","dummy3"],完全符合你的需求,而且不会触发报错。
内容的提问来源于stack exchange,提问作者27mdmo7sn
相关产品推荐
相关产品推荐

