简明现代魔法 -> PHP服务器脚本 -> PHP+MySQL应用的乱码根绝方案
PHP+MySQL应用的乱码根绝方案
2010-05-22
乱码的现象相信大家都遇到过,也有很多方法去解决。有些方法在某些环境下确实解决了问题,但是换个运行环境可能又会出毛病了。现在 nowamagic 网站给大家介绍一个能够根绝乱码现象的方法,很简单却很有效。主要思想就是客户端页面,数据传递,和数据库存储的编码要一致。
首先在设计数据表的时候,在末尾加上这么一句:
DEFAULT CHARACTER SET utf8;
这样就能够保证数据库使用 utf8 存储。
然后在前端页面上加上下面:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
这样就能够保证前端页面也是用 utf8 编码。
最后要说的是,数据传递中如何规范编码?也很简单。
mysql_query("SET NAMES 'utf8'");
下面给出本站的数据库连接类。
class nmdb
{
// 连接数据库
function __construct($host, $username, $password)
{
@mysql_connect($host, $username, $password);
mysql_query("SET NAMES 'utf8'");
}
// 连接数据表
function select_db($database)
{
return @mysql_select_db($database);
}
// 执行SQL语句
function query($query)
{
return @mysql_query($query);
}
// 将结果集保存为数组
function fetch_array($fetch_array)
{
return @mysql_fetch_array($fetch_array, MYSQL_ASSOC);
}
// 获得记录数目
function num_rows($query)
{
return @mysql_num_rows($query);
}
// 关闭数据库连接
function close($conn)
{
return @mysql_close($conn);
}
}
使用这个连接类来进行数据库与前端页面进行数据传递,就可以规范数据格式为 utf8。
如何使用这个类?下面给出一个例子。
<?php
include("includes/nmdb.php");
include("includes/dbinfo.php");
$connector = new nmdb($host, $username, $password);
$connector -> select_db($database);
$count = $connector -> num_rows($connector -> query("select * from magazine"));
$query = "select * from magazine order by ";
$query .= "magazine_pubtime desc limit 0, 3";
$result = $connector -> query($query);
?>
<?php
while($myrow = $connector -> fetch_array($result))
{
?>
<div class="mag_show">
<div class="mag_front"><a href="magazineDetail.php?id=<?=$myrow["magazine_id"]?>" target="_blank"><img border="0" src="images/<?php echo $myrow["magazine_frontsmall"]; ?>" /></a></div>
<div class="mag_name"><?php echo $myrow["magazine_name"]; ?></div>
<div class="mag_function">
<a href="#">在线阅读</a> | <a href="#">收藏</a> | <a href="#">下载</a>
</div>
</div>
<?php
}
?>
<?php
$connector -> close($connector);
?>

