0

0

PHP如何指定字符集编码_PHP指定编码方法【兼容】

絕刀狂花

絕刀狂花

发布时间:2026-01-14 13:51:09

|

561人浏览过

|

来源于php中文网

原创

PHP字符集编码需在HTTP头、MySQL连接、PHP内部函数及文件保存四层统一设为UTF-8无BOM,缺一将导致乱码:header('Content-Type: text/html; charset=utf-8')须前置;PDO用SET NAMES utf8mb4;mb_internal_encoding('UTF-8');文件禁用BOM。

php如何指定字符集编码_php指定编码方法【兼容】

PHP 中指定字符集编码,关键不是“写在哪”,而是“在哪儿生效、对谁生效”。不同层级的编码设置互不替代,漏掉任一环都可能引发乱码。

HTTP 响应头里的 Content-Type 必须带 charset

浏览器靠这个决定如何解码响应体。光写 header('Content-Type: text/html') 不够,必须显式声明编码:

header('Content-Type: text/html; charset=utf-8');

注意:header() 必须在任何输出(包括空格、BOM)之前调用;若已启用输出缓冲(ob_start()),可稍晚些,但仍需在 echo 实际 HTML 之前。

常见错误:

立即学习PHP免费学习笔记(深入)”;

  • 忘记加 charset=utf-8,导致 IE 或旧版浏览器默认用 GBK 解析 UTF-8 内容
  • 写成 charset=UTF8(缺短横线),部分环境不识别
  • 里写了 就以为够了——它只是后备方案,优先级低于 HTTP 头

MySQL 连接层必须执行 SET NAMES 或等效操作

PHP 连接 MySQL 后,默认通信编码常为 latin1,即使数据库/表是 utf8mb4,读写时仍会出错。

推荐方式(PDO):

$pdo = new PDO($dsn, $user, $pass, [
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
]);

或连接后立即执行:

$pdo->exec("SET NAMES utf8mb4");

使用 mysqli 时:

NeuralText
NeuralText

Neural Text是一个使用机器学习自动生成文本的平台

下载
mysqli_set_charset($link, 'utf8mb4');

注意:SET NAMES utf8 已过时,不支持 emoji 等四字节字符,务必用 utf8mb4mysqli_set_charset()mysqli_query($link, "SET NAMES ...") 更可靠,后者在某些配置下可能被忽略。

mb_internal_encoding()default_charset 影响 PHP 字符串函数行为

这两个设置决定 mb_* 系列函数(如 mb_strlen()mb_substr())的默认编码,也影响 htmlentities() 等函数的内部处理逻辑。

建议统一设为 UTF-8

mb_internal_encoding('UTF-8');
ini_set('default_charset', 'UTF-8');

注意:

  • mb_internal_encoding() 不影响 HTTP 输出头,也不改变数据库连接编码
  • ini_set('default_charset', ...) 会影响 htmlentities() 默认使用的编码,但不会自动添加 HTTP 头——它只是让这些函数“知道该用什么编码干活”
  • 若项目混用多种编码(极不推荐),必须在每次调用 mb_* 函数时显式传入 $encoding 参数

文件本身保存为 UTF-8 无 BOM 是硬性前提

PHP 解析器读取源码时,若文件含 BOM(尤其是 Windows 编辑器默认保存的 UTF-8 with BOM),会在输出开头注入不可见字节,导致 header() 调用失败,并引发“headers already sent”错误。

验证方法:

  • 用 VS Code、Sublime Text 等编辑器检查右下角编码显示,确认是 UTF-8,且状态栏无 BOM 标识
  • Linux/macOS 下可用 hexdump -C file.php | head 查看前几字节:正常 UTF-8 无 BOM 开头是 3c 3f 70(即 ),有 BOM 则是 ef bb bf

一旦发现 BOM,用编辑器“另存为 → UTF-8 无 BOM”或命令行清理:sed -i '1s/^\xEF\xBB\xBF//' file.php

最易被忽略的是:数据库字段值从页面提交过来,经 PHP 处理再存回数据库,中间任意一环(表单 accept-charset、HTTP 头、MySQL 连接、PHP 字符串函数)编码不一致,都会让一个汉字变成 某 或问号。没有“一键解决”,只有逐层对齐。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2513

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1596

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1488

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1415

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1445

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1306

2023.11.13

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.7万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 791人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号