解决htmlspecialchars() expects parameter 1 to be string, array given错误——Bootstrap动态表格添加行异常问题
修复Bootstrap动态表格添加行时的
htmlspecialchars()类型错误 看起来你遇到的问题是Blade UI Kit的输入组件在处理数组格式的name属性时出现了类型不匹配错误。我来帮你一步步解决这个问题:
错误根源
这个报错htmlspecialchars() expects parameter 1 to be string, array given,是因为你使用的Blade UI Kit <x-input> 组件在处理类似product[]这种数组格式的name属性时,把它当成了数组而非字符串传入了htmlspecialchars()函数,导致类型校验失败。
修复方案(两种可选)
方案1:改用原生HTML Input标签(最省心)
你的原始代码本来就用的是原生HTML输入框,它对数组格式的name属性支持是原生的,完全适配动态添加行的逻辑,不会触发组件的类型错误。
把所有Blade UI的组件写法改回原生HTML即可:
<!-- 错误的Blade组件写法 --> <x-input name="product[]" placeholder="Enter Product Name" class="form-control" /> <!-- 改回原生HTML写法(和你最初的代码一致) --> <input type="text" name="product[]" placeholder="Enter Product Name" class="form-control" />
对所有涉及qty[]、price[]、total[]的输入框都做同样修改,之后动态添加行的逻辑就能正常运行,计算总价的JS也能正常工作。
方案2:调整Blade UI Kit组件的使用方式(如果你坚持用组件)
如果你一定要保留Blade UI的组件,需要处理name属性的类型问题:
确保
name属性以字符串传递
明确把数组格式的名称作为字符串传入组件:<x-input name="product[]" type="text" placeholder="Enter Product Name" class="form-control" />注意一定要显式传递
type属性,避免组件默认值引发的额外问题。自定义组件处理数组类型
如果你还是报错,可以发布Blade UI的组件到本地视图目录,然后修改input.blade.php文件:
找到组件中渲染name属性的代码,添加类型转换逻辑:<!-- 修改前 --> name="{{ htmlspecialchars($name) }}" <!-- 修改后 --> name="{{ htmlspecialchars((string) $name) }}"这样即使传入的是数组类型,也会被强制转换成字符串,避免类型错误。
额外验证
修改完成后,点击「Add Row」按钮测试:
- 新行应该能正常渲染出来
- 填写数量和单价后,总价、小计、税额、总计都能正确计算
- 不会再出现
htmlspecialchars()的类型错误提示
内容的提问来源于stack exchange,提问作者Zahraa
相关产品推荐
相关产品推荐

