打开php文件显示乱码是开发中经常遇到的情况,乱码的出现通常和编码配置不匹配有关,下面从常见场景出发介绍对应的解决方法。

检查php文件本身的编码格式
首先确认php文件保存时的编码格式是否正确,大多数情况下我们需要使用UTF-8无BOM格式保存文件。如果使用记事本或者其他编辑器保存时选择了其他编码,就可能出现乱码。
以VS Code为例,点击右下角的编码显示区域,选择通过编码保存,然后选择UTF-8即可。注意不要选择UTF-8 with BOM,BOM头可能会导致页面开头出现多余字符或者解析异常。
设置php输出内容的字符编码
如果文件编码正确但页面还是乱码,需要检查是否设置了正确的输出编码头。可以在php文件的最开头添加header设置,指定输出内容的类型和编码。
<?php
// 设置输出内容为HTML格式,编码为UTF-8
header("Content-type: text/html; charset=utf-8");
echo "测试中文内容输出";
?>
要注意header设置必须放在所有输出内容之前,包括空格和换行,否则设置会失效。
处理数据库交互导致的乱码
如果乱码出现在从数据库读取数据之后,需要检查数据库连接的编码设置。以MySQLi为例,连接数据库后需要设置字符集。
<?php
$conn = new mysqli("127.0.0.1", "root", "password", "test_db");
// 检查连接是否成功
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 设置数据库连接字符集为UTF-8
$conn->set_charset("utf8");
// 查询数据并输出
$sql = "SELECT content FROM test_table";
$result = $conn->query($sql);
while ($row = $result->fetch_assoc()) {
echo $row["content"];
}
$conn->close();
?>
同时要保证数据库表的字符集也是UTF-8,创建表的时候可以指定字符集:
CREATE TABLE test_table (
id INT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(255)
) DEFAULT CHARSET=utf8;
其他常见场景的解决方法
如果是读取本地文件内容出现乱码,可以在读取的时候指定编码转换。比如读取GBK编码的文件内容转换为UTF-8输出:
<?php
// 读取GBK编码的文件内容
$content = file_get_contents("test.txt");
// 将GBK编码转换为UTF-8
$content = mb_convert_encoding($content, "UTF-8", "GBK");
echo $content;
?>
另外如果是服务器环境默认编码配置有问题,可以检查php.ini中的default_charset配置,将其设置为UTF-8:
default_charset = "UTF-8"
修改后需要重启php服务让配置生效。