PHP网页编码错误解决:GB2312与UTF-8编码设置指南

为什么PHP页面会出现HTML乱码?

PHP网页编码错误解决:GB2312与UTF-8编码设置指南

1、PHP网页编码错误;

如果要使用gb2312编码,那么PHP应该输出 header: header("Content-Type: text/html; charset=gb2312"),添加到静态页面中,所有文件的编码格式都是ANSI。你可以用记事本打开它并保存为所选的编码。对于 ANSI,覆盖源文件。

如果要使用UTF-8编码,那么PHP应该输出header: header("Content-Type:text/html;charset=utf-8"),添加静态页面,所有文件的编码格式都是UTF -8。保存为utf-8可能有点麻烦。一般utf-8文件开头都会有BOM。如果使用session的话,就会出现问题。可以使用editplus来保存。在editplus中,进入工具->参数选择->文件->UTF-8签名,选择始终删除,然后保存即可删除BOM信息。

PHP 本身不是 Unicode。 substr等所有函数都要改为mb_substr(需要安装mbstring扩展);或 iconv 可用于转码。

2、MySQL编码和PHP编码不一致;

解决方案:

修改mysql配置文件my.ini或my.cnf。 mysql最好使用utf8编码 [mysql]default-character-set=utf8 [mysqld]default-character-set=utf8 default-storage-engine=MyISAM 在[mysqld]下添加:default-collat​​ion=utf8_bin init_connect='设置名称 utf8'

添加 mysql_query("设置名称'编码'");在需要执行数据库操作的PHP程序之前。编码与PHP编码一致。如果PHP编码是gb2312,那么mysql编码也是gb2312。如果是utf-8,那么mysql编码就是utf8。这样在插入或检索数据时就不会出现乱码了。

3、PHP的编码与操作系统不一致。

Windows和Linux的编码是不同的。在Windows环境下,调用PHP函数如move_uploaded_file()、filesize()、readfile()等时,如果参数为UTF-8编码,会出现错误,这些函数都是处理上传的。 ,下载时经常使用,调用时可能会出现如下错误:

Warning: move_uploaded_file()[function.move-uploaded-file]:failed to open stream: Invalid argument in ...
Warning: move_uploaded_file()[function.move-uploaded-file]:Unable to move '' to '' in ...
Warning: filesize() [function.filesize]: stat failed for ... in ...
Warning: readfile() [function.readfile]: failed to open stream: Invalid argument in ..

登录后复制

虽然在Linux环境下使用gb2312编码不会出现这些错误,但是保存的文件名会出现乱码,无法读取文件。这种情况下,可以将参数转换为操作系统能够识别的编码。编码转换可以用mb_convert_encoding(string,新编码,原编码)或者iconv(原编码,新编码,string)进行,这样处理后保存的文件名就不会出现乱码,可以正常读取文件到实现中文名文件的上传和下载。

其实还有更好的解决方案,就是和系统完全分离,不需要考虑系统的编码。您可以生成一个仅由字母和数字组成的序列作为文件名,并将原始的汉字名称保存在数据库中。这样调用move_uploaded_file()时就不会出现问题了。下载时只需将文件名改为原来的中文名称即可。中文名。实现下载的代码如下

header("Pragma: public");
header("Expires: 0");
header("Cache-Component: must-revalidate, post-check=0, pre-check=0");
header("Content-type: $file_type");
header("Content-Length: $file_size");
       header("Content-Disposition: attachment; filename="$file_name"");
header("Content-Transfer-Encoding: binary");
readfile($file_path);

登录后复制

$file_type 是文件类型,$file_name 是原始名称,$file_path 是服务上保存的文件的地址。

推荐教程:《PHP教程》

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

53阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

44阅读

php一句话木马,一句话木马ctf

2026年10月05日

48阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

50阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

47阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

42阅读