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

Laravel Blade中Select下拉框西班牙语重音字符显示异常排查

问题根源分析与解决方案

你的问题核心出在错误地将Eloquent模型实例当作字符串进行解析,这直接导致了重音字符的编码异常。

错误代码的问题点

当你执行Activity::select('entityAct')->distinct()->orderBy('entityAct')->get();时,返回的$entities是Eloquent集合,其中每个$entity是Activity模型的实例,而非字符串。你直接对模型实例使用explode,PHP会自动将模型转为JSON格式的字符串(类似{"entityAct":"Entidad con acento"}),手动拆分这个字符串的操作完全没必要,而且会破坏UTF-8编码的完整性——尤其是mb_convert_encoding的重复转换,会让原本正常的重音字符出现乱码。

修正后的控制器代码

直接从模型实例中获取entityAct属性即可,无需手动解析字符串:

public function getEntities()
{
    // 用pluck直接获取去重并排序的entityAct列表,简化代码
    $entidades = Activity::select('entityAct')
        ->distinct()
        ->orderBy('entityAct')
        ->pluck('entityAct')
        ->toArray();
        
    return array_unique($entidades);
}

简化后的Blade代码

另外,Blade模板中不建议直接调用控制器静态方法,更合理的方式是通过控制器将数据传递到视图,但如果暂时保留现有结构,修正后无需额外编码转换:

@php
    $entidades = \App\Http\Controllers\ActivityController::getEntities();
@endphp
<div class="col-lg-6">
    <select name="selectEntity" id="selectEntity">
        <option selected value="">Elige una entidad</option>
        @foreach ($entidades as $entidad)
            <option value="{{ $entidad }}">{{ $entidad }}</option>
        @endforeach
    </select>
</div>

额外验证点

  1. 确认数据库表的entityAct字段编码为utf8mb4_unicode_ci或utf8mb4_spanish_ci
  2. 检查Laravel配置文件config/database.php,确保MySQL连接的charset设为utf8mb4,collation设为utf8mb4_unicode_ci

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:16:04