Laravel 10中pluck()方法无法正确显示特殊字符的问题排查
问题原因与解决办法
问题根源
pluck('name') 返回的是Laravel Collection集合对象,并非单个字符串。在视图中用 {{$user_name}} 输出时,集合会被转为类似数组的字符串形式,再加上Blade模板默认的HTML转义处理,就导致特殊字符被转义显示。
而之前通过 DB::table('users')->select('name')->where('id', $id)->get() 后取 $user_name[0]->name,得到的是单个字符串,Blade输出时能正确渲染特殊字符。
解决办法
有两种简单的修正方式:
直接获取单个字符串值
使用value()或first()直接拿到目标字段的字符串值:// 方法1:用value()直接取字段值 $user_name = User::where('id', $id)->value('name'); // 方法2:先取模型实例再拿字段 $user_name = User::where('id', $id)->first()->name;此时
$user_name是纯字符串,视图中用{{$user_name}}即可正常显示特殊字符。从集合中提取单个值
如果坚持使用pluck(),可以通过first()从集合中取出第一个元素:$user_name = User::where('id', $id)->pluck('name')->first();处理后
$user_name变为字符串,直接在视图中输出即可。
注意:不要轻易使用
{!! $user_name !!}来关闭转义,这种方式会带来XSS安全风险,仅适用于完全可信的静态内容。
内容的提问来源于stack exchange,提问作者zkanoca
相关产品推荐
相关产品推荐

