MYSQL数据库,从其中查出来的数据用echo输出到网页上是乱码,而且奇怪的是只有局部一个地方是乱码,其它地方却显示正常。$sql="select username from pw_members where uid=?";
$result=$handler->exeSql($sql,array($winduid),"select");
if($result){
echo '<div id="user_name">'.$result["username"].'</div>' }else{
echo '<div id="user_name">未知用户名</div>';
}这是代码,然后网页开头是<meta http-equiv="Content-Type" content="text/html"; charset="gbk" />数据库信息是:
Server characterset:utf8
Db characterset:utf8
Client characterset:utf8
Conn. characterset:utf8
字段信息:
Field:username
Type:varchar(18)并不是全部文字都是乱码,只有这个地方是乱码,求解释~~
$result=$handler->exeSql($sql,array($winduid),"select");
if($result){
echo '<div id="user_name">'.$result["username"].'</div>' }else{
echo '<div id="user_name">未知用户名</div>';
}这是代码,然后网页开头是<meta http-equiv="Content-Type" content="text/html"; charset="gbk" />数据库信息是:
Server characterset:utf8
Db characterset:utf8
Client characterset:utf8
Conn. characterset:utf8
字段信息:
Field:username
Type:varchar(18)并不是全部文字都是乱码,只有这个地方是乱码,求解释~~
未知用户名我相信你可以看到这个不是乱码你的数据库用utf-8存储,但前端显示的HTML却使用GBK编码,自然会有一部分总要乱码。
你可以将 $result["username"] 转码为GBK.
$result["username"] = iconv('UTF-8', 'GBK', $result["username"]);
或者将你的.php或.html文件保存为utf-8
我现在改成了这样:
if($result){
$result["username"]=iconv('UTF-8','GBK',$result["username"]);
echo '<div id="user_name">'.$result["username"].'</div>';
else{}未知用户名确实如你所说,可以显示,但是我按你这方法调试了以后,还是不行~是不是我浏览器设置了什么编码?
另外在取数据库数据前指定数据编码SET NAMES('UTF8');//gbk
好久不见,妞妞。
如果给其它人访问的话,那他们是不是也要这么设置才行呢?
取数据前指定编码了是不是就不用iconv了?
我把浏览器(chrome)的编码设置成了“utf-8”,然后<head>中加入了这条代码
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />然后取消了iconv转换,但是整个网页都变成乱码了。妞妞,这个编码的问题我不是很清楚啊,能不能解释下啊~刚才百度了四个编码都没查到什么资料啊。
我设置了SET NAMES ‘UTF-8'
我用的是GVim,怎么保存成utf-8的形式?
感觉好复杂啊。。
或者直接到win系统下...editplus notepad++...另存
妞妞,能不能解释一下这4个编码是什么过程里用到的啊?保存成utf-8形式是什么意思?还有别的形式吗?
一个是告诉浏览器应该使用什么编码来显示
一个是文件自身用的什么编码windows下用editplus 或者notepad++啊 很简单 反正就是另存为嘛...然后你就可以看到有编码选了
还有ANSI也就是 GBK...还有什么无头的UTF-8 好像还有一些欧洲的编码,这个我忘记了。
谢谢妞妞~我已经解决这个问题了,问题是我的PHP文件编码不是utf-8的。
还有最后一个问题想请教一下,就是我在数据库中查看了show variables like 'char%';,然后看到了client,connection和results三个字符集都是utf8的,但是为什么还是要在代码里加入query("SET NAMES utf8");才行呢?这个SET NAMES不就是改变这3个字符集的吗?