centos: php中文乱码

2017-01-12 10:05:10来源:oschina作者:理性编程人点击



服务器之前别人写的php代码:
现在php中文乱码:解决方案
show create table t_user_friend;
发现其是latin1编码的,需将其转成utf8
命令如下
alter table t_user_friend convert to character set utf8;
这边也可以通过navcat设计表重新把表的编码更改为 utf8-unicode-cli
当然还可以设置mysql的客户端和服务器的默认编码
vi /etc/mysql/my.conf
在[mysql] 下面 添加default-character-set=utf8
在[mysqld] 下面添加
character-set-server=utf8
collaction-server = utf8-unicode-cli或者下面的
//collaction-server = utf8-greneral-cli
做完上面,mysql这边已经全部utf8了,因为php代码meta 里面的charset=gb2312搜索统一改为utf-8,
或者在公用模块里面
header() 函数向客户端发送原始的 HTTP 报头。
认识到一点很重要,即必须在任何实际的输出被发送之前调用 header() 函数(在 PHP 4 以及更高的版本中,您可以使用输出缓存来解决此问题):
<?php
header('HTTP/1.1 200 OK'); // ok 正常访问
header('HTTP/1.1 404 Not Found'); //通知浏览器 页面不存在
header('HTTP/1.1 301 Moved Permanently'); //设置地址被永久的重定向 301
header('Location: http://www.ithhc.cn/'); //跳转到一个新的地址
header('Refresh: 10; url=http://www.ithhc.cn/'); //延迟转向 也就是隔几秒跳转
header('X-Powered-By: PHP/6.0.0'); //修改 X-Powered-By信息
header('Content-language: en'); //文档语言
header('Content-Length: 1234'); //设置内容长度
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT'); //告诉浏览器最后一次修改时间
header('HTTP/1.1 304 Not Modified'); //告诉浏览器文档内容没有发生改变###内容类型###
header('Content-Type: text/html; charset=utf-8'); //网页编码
header('Content-Type: text/plain'); //纯文本格式
header('Content-Type: image/jpeg'); //JPG、JPEG
header('Content-Type: application/zip'); // ZIP文件
header('Content-Type: application/pdf'); // PDF文件
header('Content-Type: audio/mpeg'); // 音频文件
header('Content-type: text/css'); //css文件
header('Content-type: text/javascript'); //js文件
header('Content-type: application/json'); //json
header('Content-type: application/pdf'); //pdf
header('Content-type: text/xml'); //xml
header('Content-Type: application/x-shockw**e-flash'); //Flash动画#########声明一个下载的文件###
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="ITblog.zip"');
header('Content-Transfer-Encoding: binary');
readfile('test.zip');
#########对当前文档禁用缓存###
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
#########显示一个需要验证的登陆对话框###
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Top Secret"');
######
###声明一个需要下载的xls文件###
header('Content-Disposition: attachment; filename=ithhc.xlsx');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Length: '.filesize('./test.xls'));
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
readfile('./test.xls');
######
?>
header("Content-type: text/html; charset=utf-8");
这一句前不能向页面输出任何内容,意思是不能使用echo等语句,也不能输出html标签或文字
如果在header前输出了等标签或文字那肯定会报错
实际上你用了header("Content-type: text/html; charset=utf-8");
这一句的话就不需要用了,同一个道理
最后再将php文件编码转为UTF8-BOM,notpad++修改
上面解决,可是这个mysql查询出的语句显示还是?号乱码,最后在query方法里面,db连接之后,mysql_query("set names utf8")
总而言之:
mysql表编码统一
my.cnf编码统一
php文件编码统一
php里面的meta或者header设置编码统一
php连接之后,query请求之前mysql_query("set names utf8")

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台