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

Laravel多选框回显旧值报错:htmlspecialchars()期望参数为字符串

问题原因

你遇到的这个报错核心原因是类型不匹配:

  • 你的<select>带multiple属性且name为keywords[],表单提交时会把选中的选项以数组的形式发送到后端,Laravel的old('keywords')会完整返回这个数组。
  • 而Blade的{{ }}语法默认会调用PHP的htmlspecialchars()函数对输出内容进行转义,这个函数的参数要求是字符串,直接传入数组就触发了expects parameter 1 to be string, array given的错误。
解决方案

根据你的使用场景,这里提供几种可行的处理方式:

1. 循环输出单个选中项

如果需要把选中的关键词逐个展示(比如用标签、列表形式),可以先判断旧值是否存在,再循环遍历数组:

@if($oldKeywords = old('keywords'))
    @foreach($oldKeywords as $keyword)
        <span class="badge bg-info">{{ $keyword }}</span>
    @endforeach
@endif

2. 转换为字符串后输出

如果只需要将选中值以逗号分隔的字符串形式展示,用implode()把数组拼接成字符串即可:

{{ old('keywords') ? implode(', ', old('keywords')) : '' }}

这样htmlspecialchars()就能正常处理字符串类型的参数了。

3. 给Select2控件回显选中值

如果你需要在Select2组件中恢复之前选中的选项,要在初始化时传入旧值数组,注意这里要用{!! !!}输出未转义的JSON(因为Select2的val()方法需要数组参数):

$(function() {
    $('#keywords').select2({
        // 你的远程数据源配置,比如ajax选项
        placeholder: '请选择关键词',
        allowClear: true
    }).val({!! json_encode(old('keywords') ?: []) !!}).trigger('change');
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:29:17