Laravel中JSON列UTF-8重音字符显示异常问题求助
JSON列UTF-8重音字符显示异常解决办法
问题描述
从JSON列properties中获取数据时,UTF-8重音字符显示异常,实际输出为"type_nen": "Emiss\u00e3o",期望正常显示为"type_nen": "Emissão"。相关存储代码如下:
public function store(HunterRequest $request) { $validations = $request->validated(); $validations['properties'] = $validations; HunterModel::create($validations); return redirect('/')->with('success_store','Hunter are registered in the system.'); }
解决方案
1. 检查数据库与模型配置
- 确保数据库连接字符集设置正确(以Laravel为例,修改
.env文件):DB_CHARSET=utf8mb4 DB_COLLATION=utf8mb4_unicode_ci - 确认模型中
properties字段已正确设置JSON类型转换:
Laravel的JSON字段转换会自动处理UTF-8字符,无需手动转义。protected $casts = [ 'properties' => 'json', ];
2. 手动控制JSON编码(若自动转换失效)
如果自动转换未生效,可在存储时手动指定编码选项,避免转义UTF-8字符:
public function store(HunterRequest $request) { $validations = $request->validated(); // 使用JSON_UNESCAPED_UNICODE确保重音字符不被转义 $validations['properties'] = json_encode($validations, JSON_UNESCAPED_UNICODE); HunterModel::create($validations); return redirect('/')->with('success_store','Hunter已在系统中注册。'); }
3. 读取数据时解码处理
若读取数据时仍显示转义字符,可在获取后手动解码:
$hunter = HunterModel::find($id); $properties = json_decode($hunter->properties, true, 512, JSON_UNESCAPED_UNICODE);
内容的提问来源于stack exchange,提问作者user20509677
相关产品推荐
相关产品推荐

