只能是编码转换了。。写一个函数,把utf8转成gbk的就可以了
/*
*UTF-8转简体
*/
function utf82gb($gb){ /* Program writen by sadly modified by agun */
if(!trim($gb))
return $gb;
$filename=IDIR."include/gb-unicode.table";
$tmp=file($filename);
$codetable=array();
while(list($key,$value)=each($tmp))
$codetable[hexdec(substr($value,7,6))]=substr($value,0,6);;
$out = "";
$len = strlen($gb);
$i = 0;
while($i < $len) {
$c = ord( substr( $gb, $i++, 1 ) );
switch($c >> 4)

case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
// 0xxxxxxx
$out .= substr( $gb, $i-1, 1 );
break;
case 12: case 13:
// 110x xxxx 10xx xxxx
$char2 = ord( substr( $gb, $i++, 1 ) );
$char3 = $codetable[(($c & 0x1F) << 6) | ($char2 & 0x3F)];
$out .= _hex2bin( dechex( $char3 + 0x8080 ) );
break;
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
$char2 = ord( substr( $gb, $i++, 1 ) );
$char3 = ord( substr( $gb, $i++, 1 ) );
$char4 = $codetable[(($c & 0x0F) << 12) | (($char2 & 0x3F) << 6) | (($char3 & 0x3F) << 0)];
$out .= _hex2bin( dechex ( $char4 + 0x8080 ) );
break;
}
}
return $out;
}function _hex2bin( $hexdata )
{
for ( $i=0; $i<strlen($hexdata); $i+=2 )
$bindata.=chr(hexdec(substr($hexdata,$i,2)));return $bindata;
}

解决方案 »

  1.   

    mysql_query("SET @@character_set_connection=utf8,@@character_set_results=GBK,@@character_set_client=GBK");
      

  2.   

    很简单~
    1.页面转成 utf-8
    2.数据库转成 gbk页面使用 gbk ,数据库用utf-8 根本就没用
    即使你存了其他语言在数据库,页面一样显示不了所以如果你不需要多国语言支援,将数据库转成 gbk 是最简单的方法
      

  3.   

    1楼;$filename=IDIR."include/gb-unicode.table";——这个不要文件吗?
    你的我试过了不行的2楼 ;phpwind就用这种方式的,可我怎么就做不成啊?
      

  4.   

    不会啊,我的数据库为utf8的,但我能装phpwind_GBK编码的也不乱码啊!
      

  5.   

    iconv() 函数 mb_convert_encoding() 函数
      

  6.   

    空间的PHP设置里转换的DLL好像没开通,,但PHPwind怎么做到的啊?
      

  7.   


    这个和
    mysql_query("SET names 'GBK'");区别大吗?
      

  8.   

    mysql_query("SET names 'GBK'");
    就相当于
    mysql_query("SET @@character_set_connection=GBK,@@character_set_results=GBK,@@character_set_client=GBK"); 那三小项都为GBK,,,有区别的A
      

  9.   

    呵呵,
    character_set_connection=GBK和
    character_set_connection=utf8
    有区别吗?
      

  10.   


    页面跟数据库不统一编码根本就没有好处
    而为了应付其所产生的问题去做iconv及mb_convert_encoding这些处理
    只会为伺服器增加巨大及没有必要的负担将数据库转换一下编码只需要几简单的步骤就可以完成
    为什么不做?
      

  11.   

    iconv其实MySQL中编码是什么没有什么关系 
      

  12.   

    mysql_query("SET names 'GBK'");这个试过了没?
      

  13.   


    转换编码,使用mb_convert_encoding函数,那个iconv有很多都转换不了,但是比较占内存,速度比较慢。
      

  14.   


    你的建议很好,但对我而言是有行不通的,空间数据库是服务商的,不是我想转就可以转的,还是帮我想歪主意更有用一点吧!
    搞懂了PHPwind就我的问题就没有了。
      

  15.   


    这个set names试过了,无效!mb_convert_encoding,iconv貌似都不是PHP的库函数,要另加载DLL模块的,权限在空间服务商手中,,我只能望洋兴叹了...
    我也Google和百度了很多资料,,,但也不是很清楚,哪位高手能帮我分析出PHPwind是怎么做到的,就相当OK了!
    话说回来,我是个新手,先谢谢大家的帮助!
      

  16.   

    空间服务商都会给你改编码的
    phpmyadmin本身就可以完成
    我从未见过一个服务商会不能改的,免费空间都可以做网站连数据库都不能控制那还能做什么 =_=
      

  17.   


    这个的解决方法:set names 这种方法绝对不行。首先,楼主应该有建立库的权限吧(create database ,如果这个都没有,哎,换服务提供商吧)建立库时,指定编码:
    CREATE DATABASE example_db_name DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;这样就行了。
      

  18.   

    我在2楼提到的方法绝对可行。你们谁见过我在CSDN说错过?之所以不行,是因为根本没理解,只是照着做,很容易在细节的地方搞错。
    我也不多说了。你把你的数据库内容贴出来,我写段代码给你。用类似下面的语句来获取数据库内容:select hex(contents) from your_table limit 1;hex是一个mysql函数,contents是你的字段名。
      

  19.   

    数据库编码不用改  把页面另存为UTF-8的应该没问题了
      

  20.   

    set names GBK
    告诉数据库客户端使用的是GBK编码.
      

  21.   

    很遗憾,问题确实是这样的,我连数据库都不能完全控制,也确实是免费空间的(空间和数据库是送的),说回来我是在学习测试的,那些对我来说已经是有必要忽略的了。看到你这句话,我很兴奋,我一会写个页面源码给你!!!你帮我看看!!!最后我还是想知道PHPwind是怎样做到的,我也用它的GBK编码的版本啊,和我现在测试放同一个空间和数据库里,为什么它不乱码呢?现在我全用utf8,是可以了,但就是想用GBK编码的页面。
    我的数据库就是这样的权限!
      

  22.   

    没有问题啊,在我这边的gbk 页面能正常显示<?php
    $lnk = mysql_connect('localhost', 'root', '')
           or die ('Not connected : ' . mysql_error());// make foo the current db
    mysql_select_db('database', $lnk) or die ('Can\'t use ' . mysql_error());
    mysql_query("set names 'gbk'");
    $query = "SELECT * FROM sourceinfo limit 0,1";
    $result = mysql_query($query);
    while($row = mysql_fetch_array($result)){
    echo $row["title"];
    }
    ?>
      

  23.   

    mysql_query("set names 'gbk'"); 
    就加这一句就解决问题了,何必搞得哪么复杂.前提是,数据库的数据都是通过程序录入取出.
      

  24.   

    嗯,,谢谢!确实没问题了,谢谢啦!^_^
    昨天怎么老set name都不成功啊!!!
    是不是require_once了一个文件造成的??
      

  25.   

    嗯,,谢谢!确实没问题了,谢谢啦!^_^
    昨天怎么老set names都不成功啊!!!
    是不是require_once了一个文件造成的??