使用 UTF-8 和 mbstring 修复 PHP 表单乱码


出版日期:

更新:


技术文章 > 使用 UTF-8 和 mbstring 修复 PHP 表单乱码

2026状态和安全使用

结论:在 HTML 表单、HTTP 响应、PHP 源、字符串处理和数据库连接中保留一种显式编码(通常为 UTF-8)。在更改全局设置之前,捕获原始输入并识别字节解码不正确的边界。

你将学到什么

  • 如何区分显示问题与输入转换或数据库损坏。
  • 哪些标头和 PHP 设置与现代 UTF-8 应用程序相关。
  • 为什么不应将下面的旧版 mbstring.internal_encodingmbstring.http_input 配方复制到当前部署中。

这适用于谁: PHP 维护人员在表单验证、重定向或数据库往返后对 mojibake 进行故障排除。

2026 年立场: PHP 在 PHP 5.6 中弃用了旧的 iconv/mbstring 编码指令,转而使用 default_charset;现代代码应该在每个边界上进行明确的编码。保留原来的配置只是为了解释历史事件。

安全注意事项:原始文章中的命令和配置示例尚未在当前生产环境中重新运行。应用之前,请在单独的测试环境中验证支持的版本、备份、访问控制和回滚步骤。

官方主要来源

概述。

在PHP中从输入屏幕转到确认屏幕时出现乱码。

在表格中输入文字并转到确认屏幕时,文字出现乱码。

在过渡到自己的屏幕时,由于输入检查错误,也会出现乱码文本。

由于服务器刚建好,我觉得在PHP配置中缺少了一些东西,所以我将描述当时发现的情况。


目录

  1. 调查(确定事情的原因)
  2. 摘要

1. 调查(确定事情的原因)

为了调查问题的原因,对以下信息进行了调查。

1-1. 调查

首先,检查PHP设置(php.ini)。

php.ini


default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On

它与上述描述一样,似乎没有问题。

那么问题似乎是由PHP源造成的。

然而,PHP来源并没有确定可能的问题。

我再次检查了php.ini中的可疑设置,发现了一个可疑的设置。

php.ini


mbstring.http_input = auto

不清楚是否用UTF-8编码,因为它被设置为自动,所以被改成如下,以试行。

php.ini


mbstring.http_input = UTF-8

成功地解决了乱码的文本。

在 PHP 中使用多字节字符串(如日语)时,此设置对 mbstring 模块是必要的。

对收到的http请求进行编码配置。

2. 摘要

如果出现乱码,首先尝试组织处理流程。

而如果在使用PHP从输入屏幕过渡到确认屏幕或其他屏幕过渡时遇到乱码,请怀疑php.ini中的以下设置。

默认设置是'auto',所以在使用mbstring处理多字节字符串时要检查这一点。

■技术文章

查看全部技术文章。


■作者简介

查看作者简介。


■联系我们

就本文内容联系我们。