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

Laravel提交utf8字符®被转ASCII,如何让$request接收utf8原值?

你遇到的是UTF-8字符被错误解析为ISO-8859-1编码的典型问题,®的UTF-8编码为0xC2 0xAE,当系统将这两个字节按单字节编码ISO-8859-1解析时,就会分别对应字符Â和®,也就是你看到的异常内容。

解决方案

1. 校验表单标签配置

确认提交数据的form标签添加了accept-charset属性,强制指定提交编码为UTF-8:

<form method="POST" action="/你的路由地址" accept-charset="UTF-8">
    <!-- 原有input表单内容 -->
</form>

省略该属性时部分浏览器会按照操作系统默认编码提交表单,容易和页面声明的UTF-8编码冲突。

2. 校验Laravel基础配置

打开config/app.php文件,确认charset配置项值为utf-8,Laravel 5.8版本默认是该值,若被手动修改需要改回:

'charset' => 'utf-8',

3. 排除中间件篡改请求

检查是否自定义了请求处理中间件,有没有对请求参数做过htmlentities、utf8_encode等编码操作,或者引入的第三方扩展包修改了请求参数编码。你可以在app/Http/Kernel.php中临时注释非系统自带的中间件,验证问题是否消失。

4. 确认输出环节无编码问题

直接打印响应返回的内容显示异常,有可能是输出响应的编码配置错误而非请求接收时的问题,可做如下验证:

  • 将请求获取的参数直接写入本地txt文件,打开文件查看字符是否正常
  • 控制器返回响应时强制指定编码:
return response($request->input('field'), 200, ['Content-Type' => 'text/html; charset=utf-8']);

5. 校验服务器配置

如果用Nginx做服务容器,打开站点配置文件,确认添加了如下配置:

charset utf-8;
add_header Content-Type text/html; charset=utf-8;

修改后重启Nginx生效。

临时兼容方案

如果暂时无法定位根因,可以用编码转换函数手动修正参数:

$fixedField = mb_convert_encoding($request->input('field'), 'ISO-8859-1', 'UTF-8');
// 或者
$fixedField = utf8_decode($request->input('field'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:27:01