PHP HTML Mysql 中文乱码解决方案

使用PHP+Mysql+Apache写网页可谓是黄金搭档,但是Mysql的中文乱码问题也是很令人蛋疼。
      
楼主最近在实习,boss让我写一个网页,可是mysql一直出现中文乱码的问题,中文乱码本质上来说就是字符集不统一的问题,网络上关于出现乱码的原因、解决方案很多,但是却没有一篇非常详细、正确的文章,我就把自己的一些理解、实验法上来,希望给后面的人一些指点。 
        

我的邮箱是zhulicong89@gmail.com,有问题的话直接电邮我。


记住:必须将所有可以设置字符集的地方都设置成同一个字符集,可以是utf8,可以是gbk,可以是gb2312。

我就采用了utf8格式。


1.查看自己建的数据库的编码

Show create database snet;      注:snet是我数据库的名称。

+----------+---------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------+
| snet | CREATE DATABASE `snet` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)

如果不是utf8,那就设置成utf8
Alter database snet character set utf8; //将snet数据库的字符集改成utf8

2.查看自己建的表的编码

Show create table obj_type; //查看obj_type表的编码

结果如下:
)ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 |
我只显示了最后一段,表的结构没有显示出来。
如果不是utf8,那就设置成utf8
Alter table obj_type character set utf8. //修改obj_type表的编码

注:第一步与第二步的查看,可以在新建数据库与表的时候就完成,代码如下:

Create table user(
Username varchar(255),
Password varchar(255)
)charset=utf8; //一开始就设置好编码的格式。

3.写了一个简单的网页,发现是乱码

1 <html>
2 <head>
3 // <meta http-equiv="Content-Type" content="text/html; charset=utf8"/>
4 </head>
5
6 <body>
7 <form action="test.php" method="POST">
8 名字: <input type="text" name="name" />
9 <input type="submit" />
10 </form>
11 </body>
12 </html> 

不加第三行,出现乱码:


将第三行的// 去掉,则显示正常


为什么会出现这样的结果呢?
原因如下:
浏览器打开某个网页的时候,都是有一个默认的编码格式,有一些是gbk,有一些是gb2312,有一些是utf8. 谷歌的Chrome我不知道在哪里设置打开的编码格式,但是对于ie,以及firefox,都可以对着网页右击,编码总选择打开的方式。


4.写了简单的html页面,再写简单的php页面


 在test.php页面如下信息,就是一个form,添加一条记录
  1 <html>
  2    <head>
  3       <meta http-equiv="Content-Type" content="text/html; charset=utf8"/>
  4    </head>
  5
  6    <body>
  7    <form action="add.php" method="POST">
  8    名字: <input type="text" name="name" />
  9    <input type="submit" />
 10    </form>
 11    </body>
 12
 13 </html>


在add.php页面代码如下
   1 <html>
  2 <body>
  3    名字<?php echo $_POST["name"]; ?>
  4 </body>
  5 </html>
  6
  7 <?php
  8
  9 //   header('Content-Type:text/html; charset=utf8');
 10
 11    $con=mysql_connect("localhost","root","aaa");
 12    mysql_select_db("snet",$con);
 13
 14     mysql_query("SET NAMES utf8");
 15
 16     $sql="insert into obj_type values (null,'$_POST[name]')";
 17
 18     mysql_query($sql,$con);
 19
 20     echo "1 record added";
 21    mysql_close($con);
 22
 23
 24 ?>



在网络上搜索php+mysql+中文乱码,一般都会让你添加第14行,我也是这么添加的。
这样可以在mysql数据库中查看自己添加的内容。
我是使用putty远程登录的,使用utf8查看,竟然发现输入的内容是乱码。然后改成gbk查看,竟然可以。。。这个不知道是为什么。


5.再编写查看数据库内容的网页
名称为watch.php,从数据库select数据

  1 <?php
  2
  3     header('Content-Type:text/html; charset=utf8');
  4     ini_set("display_errors","off"); /*关闭警告*/
  5
  6    include_once("db_fun/db_operation.php");
  7
  8     $obj=new DB_Operation();
  9     $link=$obj->conn_db('snet');  /*链接数据库*/
 10
 11     $result=mysql_query("select * from obj_type");
 12
 13     echo "<table border='4'>
 14        <tr>
 15        <th>Id</th>
 16        <th>Name</th>
 17       </tr>";
 18
 19     while ($row=mysql_fetch_array($result)){
 20        echo "<tr>";
 21        echo "<td>" . $row['id'] . "</td>";
 22        echo "<td>" . $row['name'] . "</td>";
 23        echo "<tr>";
 24     }
 25     echo "</table>";
 26
 27
 28     $obj->disconn_db($link);
 29     ?>
 


注意:一定要添加第三行
这一行的意思是:
如果该php页面,使用utf8编码,这个和前面第三步的html使用  <meta http-equiv="Content-Type" content="text/html; charset=utf8"/>是一样的道理。(其实是不是一样的道理,我也不是很懂,呵呵)。   
以上
7      include_once("db_fun/db_operation.php");
  8     $obj=new DB_Operation();
  9     $link=$obj->conn_db('snet');  /*链接数据库*/
  这几个都是我自己写的类,朋友们如果看不懂的话,可以去w3cschool的php教程里面直接访问mysql的代码





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值