使用 UTF-8 和 mbstring 修复 PHP 表单乱码
出版日期:
更新:
技术文章 > 使用 UTF-8 和 mbstring 修复 PHP 表单乱码
2026状态和安全使用
结论:在 HTML 表单、HTTP 响应、PHP 源、字符串处理和数据库连接中保留一种显式编码(通常为 UTF-8)。在更改全局设置之前,捕获原始输入并识别字节解码不正确的边界。
你将学到什么
- 如何区分显示问题与输入转换或数据库损坏。
- 哪些标头和 PHP 设置与现代 UTF-8 应用程序相关。
- 为什么不应将下面的旧版
mbstring.internal_encoding和mbstring.http_input配方复制到当前部署中。
这适用于谁: PHP 维护人员在表单验证、重定向或数据库往返后对 mojibake 进行故障排除。
2026 年立场: PHP 在 PHP 5.6 中弃用了旧的 iconv/mbstring 编码指令,转而使用 default_charset;现代代码应该在每个边界上进行明确的编码。保留原来的配置只是为了解释历史事件。
安全注意事项:原始文章中的命令和配置示例尚未在当前生产环境中重新运行。应用之前,请在单独的测试环境中验证支持的版本、备份、访问控制和回滚步骤。
官方主要来源
概述。
在PHP中从输入屏幕转到确认屏幕时出现乱码。
在表格中输入文字并转到确认屏幕时,文字出现乱码。
在过渡到自己的屏幕时,由于输入检查错误,也会出现乱码文本。
由于服务器刚建好,我觉得在PHP配置中缺少了一些东西,所以我将描述当时发现的情况。
目录
- 调查(确定事情的原因)
- 1-1. 调查
- 摘要
1. 调查(确定事情的原因)
为了调查问题的原因,对以下信息进行了调查。
1-1. 调查
首先,检查PHP设置(php.ini)。
default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
它与上述描述一样,似乎没有问题。
那么问题似乎是由PHP源造成的。
然而,PHP来源并没有确定可能的问题。
我再次检查了php.ini中的可疑设置,发现了一个可疑的设置。
mbstring.http_input = auto
不清楚是否用UTF-8编码,因为它被设置为自动,所以被改成如下,以试行。
mbstring.http_input = UTF-8
成功地解决了乱码的文本。
在 PHP 中使用多字节字符串(如日语)时,此设置对 mbstring 模块是必要的。
对收到的http请求进行编码配置。
2. 摘要
如果出现乱码,首先尝试组织处理流程。
而如果在使用PHP从输入屏幕过渡到确认屏幕或其他屏幕过渡时遇到乱码,请怀疑php.ini中的以下设置。
默认设置是'auto',所以在使用mbstring处理多字节字符串时要检查这一点。