文档章节

PHP - 解决中文乱码问题

依宸2016
 依宸2016
发布于 2016/11/11 12:19
字数 646
阅读 2
收藏 0

转载地址:http://blog.csdn.net/amonest/article/details/6330467

PHP+MYSQL做网站开发通常都会碰到浏览器输出中文字符时乱码,这个问题的原因主要是因为HTML内容编码,PHP文件编码和MySQL数据库编码这三者不一致造成的。下面我们以UTF-8为例简述一下如何统一这三者之间的关系。

 

新增一个PHP文件,命名为test_charset.php,将下面的代码保存到该文件中:

  1. <?php   
  2.   
  3. $charset = "utf8";  
  4.   
  5. $con = mysql_connect("localhost""root""");  
  6.   
  7. mysql_query("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary"$con);  
  8.   
  9. mysql_select_db("ecshop"$con);  
  10.   
  11. $sql = "SELECT user_name, email FROM ecs_admin_user WHERE user_id = 4";  
  12. $result = mysql_query($sql$con);  
  13. $array = mysql_fetch_array($result, MYSQL_ASSOC);  
  14. mysql_close($con);  
  15.   
  16. $name = $array["user_name"];  
  17. $email = $array["email"];  
  18.   
  19. ?>  
  20. <html>  
  21. <head>  
  22. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  23. </head>  
  24. <body>  
  25.   
  26. <h1>你好, <?php echo $name; ?>!</h1>  
  27. <h2>你的邮件是:<a href="mailto:<?php echo $email; ?>"><?php echo $email; ?></a></h2>  
  28.   
  29. </body>  
  30. </html>  

 


HTML内容编码

上面的第22行:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />,这里我们指定了浏览器在解析HTML时使用UTF-8编码 。如果这里没有指定,浏览器会使用自己缺省的编码。不同的浏览器缺省编码会有所不同,比如IE6是GB2312,FireFox是UTF-8。所以,上面这段代码如果没有第22行,在FireFox会显示正常,在IE6就会显示乱码。

 


PHP文件编码

PHP文件本身也需要有一致的编码。如何检查自己的PHP文件是哪一种编码呢?Windows下简单的可以用记事本来处理。用记事本打开PHP文件,从“文件”菜单中选择“另存为...”,如下图:

 

在打开的对话框最下面有一个“编码”的选项,当前看到的就是该文件现在的编码。如果要变为其它的编码,从下拉列表框中选择,然后点击“保存”按钮。

 


MySQL数据库编码

数据库连接成功后,应该第一时间执行一条设置编码指令,如上面代码的第7行。这里有一点需要特别注意,UTF-8是正常的写法,不过在MySQL中简写成了UTF8,中间没有横线。上面第7行是将连接编码设置成utf8($charset="utf8"),而不是utf-8。这里附上ECShop设置连接编码的完整实现,供大家参考。文件是includes/cls_mysql.php。

  1. function set_mysql_charset($charset)  
  2. {  
  3.     /* 如果mysql 版本是 4.1+ 以上,需要对字符集进行初始化 */  
  4.     if ($this->version > '4.1')  
  5.     {  
  6.         if (in_array(strtolower($charset), array('gbk''big5''utf-8''utf8')))  
  7.         {  
  8.             $charset = str_replace('-'''$charset);  
  9.         }  
  10.         if ($charset != 'latin1')  
  11.         {  
  12.             mysql_query("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary"$this->link_id);  
  13.         }  
  14.     }  

本文转载自:http://blog.csdn.net/liwb1987/article/details/49613795

依宸2016
粉丝 1
博文 94
码字总数 0
作品 0
济南
高级程序员
私信 提问
PHP json_encode() 函数详解及中文乱码问题

在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。 这个函数的功能是将数值转换成json数据存储格式。 ? 1 2 3 4 5 6 7 8 9 程序运...

zyt_1978
2016/06/19
31
0
Zabbix-web的中文显示及其乱码问题解决方法

问题: 通常在安装完zabbix后默认显示的是英文界面,虽然1-2个月也就习惯了,但对于刚开始接触的人来说英文毕竟不太友好,所以为了今后方便还是将界面改为中文;当改为中文后,在查看图表时会...

紫色的茶碗
2017/08/10
0
0
PHP DOMDocument保存xml时中文出现乱码

PHP DOMDocument保存xml时中文出现乱码 It event poll2016-09-18197 阅读 xml中文PHPDomDocument乱码 php中DOMDocument对于xml操作我们只要是英文是没有问题了,但如果是中文字体就会有乱码问...

It event poll
2016/09/18
0
0
解决web服务器各种应用的乱码问题,欢迎补充和讨论

乱码问题: (1)服务器端: 修改httpd.conf (在Redhat中放置的位置为/etc/httpd/conf/) 查找: AddDefaultCharset ISO-8859-1 改成: ] 这种方式关掉了服务器的默认语言的发送,这样仅凭htm...

范堡
2009/05/06
780
0
windows下,PHP创建目录名、文件名中文乱码问题

问题 在windows下,PHP调用mkdir()、fileputcontents()、fopen()函数创建带有中文的目录或文档名时,出现乱码。 原因 经过查阅资料,这跟系统字符集有关系。 windows(简体中文),默认字符集...

城市之雾
04/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 程序员做噩梦

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# 手嶌葵《Kiss The Girl》 《Kiss The Girl》- 手嶌葵 手机党少年们想听歌,请使劲儿戳(这里) @Sharon啊 :今天...

小小编辑
42分钟前
99
6
Another app is currently holding the yum lock; waiting for it to exit...

Another app is currently holding the yum lock; waiting for it to exit... The other application is: PackageKit Memory : 153 M RSS (266 MB VSZ) Started: Thu Jul 12 00:03......

圣洁之子
50分钟前
2
0
FastDateFormat 研究

FastDateFormat 对缓存的利用,其实就是用ConcurrentHashMap 做了一个map类型的缓存 public F getInstance(final String pattern, TimeZone timeZone, Locale locale) { Validate......

暗中观察
今天
3
0
Android双向绑定原理简述

Android双向绑定原理简述 双向绑定涉及两个部分,即将业务状态的变化传递给UI,以及将用户输入信息传递给业务模型。 首先我们来看业务状态是如何传递给UI的。开启dataBinding后,编译器为布局...

tommwq
今天
4
0
Spring系列教程八: Spring实现事务的两种方式

一、 Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。...

我叫小糖主
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部