PHP网页编码错误解决:GB2312与UTF-8编码设置指南
为什么PHP页面会出现HTML乱码?

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-collation=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教程》