完美解决PHP中文乱码


Posted in PHP onNovember 26, 2009

一.首先是PHP网页的编码
1. php文件本身的编码与网页的编码应匹配
a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件。
b. 如果欲使用utf-8编码,那么php要输出头:header(“Content-Type: text/html; charset=utf-8"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,所有文件的编码格式为utf-8。保存为utf-8可能会有点麻烦,一般utf-8文件开头会有BOM,如果使用session就会出问题,可用editplus来保存,在editplus中,工具->参数选择->文件->UTF-8签名,选择总是删除,再保存就可以去掉BOM信息了。
2. php本身不是Unicode的,所有substr之类的函数得改成mb_substr(需要装mbstring扩展);或者用iconv转码。
二.PHP与Mysql的数据交互
PHP与数据库的编码应一致
1. 修改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='SET NAMES utf8'

2. 在需要做数据库操作的php程序前加mysql_query("set names '编码'");,编码和php编码一致,如果php编码是gb2312那mysql编码就是gb2312,如果是utf-8那mysql编码就是utf8,这样插入或检索数据时就不会出现乱码了
三.PHP与操作系统相关
Windows和Linux的编码是不一样的,在Windows环境下,调用PHP的函数时参数如果是utf-8编码会出现错误,比如move_uploaded_file()、filesize()、readfile()等,这些函数在处理上传、下载时经常会用到,调用时可能会出现下面的错误:
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(字符串,新编码,原编码)或iconv(原编码,新编码,字符串),这样处理后保存的文件名就不会出现乱码,也可以正常读取文件,实现中文名称文件的上传、下载。
其实还有更好的解决方法,彻底与系统脱离,也就不用考虑系统是何编码。可以生成一个只有字母和数字的序列作为文件名,而将原来带有中文的名字保存在数据库中,这样调用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 项目的方法
Jan 02 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
PHP与MYSQL中UTF8 中文排序示例代码
Oct 23 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
Sep 25 PHP
php抓取并保存网站图片的实现代码
Oct 28 PHP
WordPress开发中用于标题显示的相关函数使用解析
Jan 07 PHP
PHP MSSQL 分页实例
Apr 13 PHP
非常经典的PHP文件上传类分享
May 15 PHP
PHP批量获取网页中所有固定种子链接的方法
Nov 18 PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
Aug 09 PHP
php google或baidu分页代码
Nov 26 #PHP
php 接口类与抽象类的实际作用
Nov 26 #PHP
在mysql数据库原有字段后增加新内容
Nov 26 #PHP
Ajax PHP 边学边练 之三 数据库
Nov 26 #PHP
php 运行效率总结(提示程序速度)
Nov 26 #PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 #PHP
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 #PHP
You might like
香妃
2021/03/03 冲泡冲煮
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
JS之Date对象和获取系统当前时间详解
2014/01/13 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
Node.js数据库操作之查询MySQL数据库(二)
2017/03/04 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
python与C、C++混编的四种方式(小结)
2019/07/15 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
Pandas的数据过滤实现
2021/01/15 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
中学运动会广播稿
2014/01/19 职场文书
班级口号大全
2014/06/09 职场文书
授权委托书格式
2014/07/31 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
优秀团员自我评价
2015/03/10 职场文书
学生会工作感言
2015/08/07 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
Python办公自动化PPT批量转换操作
2021/09/15 Python
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技