我要读取一个数据库的资料出来
数据库所有字段都是unicode
我php用的是utf-8编码
php版本是5.21
服务器是windosws服务器
现在读取出来的所有中文字段,在页面显示都是?????,我在数据库里面看到资料都是正常的文字
其他数字,字母等都能正常显示
有人知道怎么处理这个情况吗?
帮忙解决一下。

解决方案 »

  1.   

    数据库所有字段都是unicode
    你用的是 mssql ?
      

  2.   


    对呀,用的mssql2005
    不是我想用,是公司的数据库就是这个,然后需要临时做一个网站出来,我用php就做了。结果就中文出不来!
      

  3.   

    假定读取后的内容在 $s 中
    则做一下转码
    $s = iconv('ucs-2', 'utf-8', $s);
      

  4.   

    对了,我自己用自己写的页面,如果在页面插入一段中文,到了数据库,insert我是加了N在前面面,数据库里面内容是测试
    但是我读出来,显示就是正常的,这个是什么问题?
      

  5.   

    假定读取后的内容在 $s 中
    不作任何处理
    echo base64_encode($s);
    贴出结果
      

  6.   


    Lg==Lg==Pz8=Lg==Lg==Lg==Pz8=Lg==Lg==Pz8= 这个是结果
    ["input_encoding"]=> string(10) "ISO-8859-1" ["output_encoding"]=> string(10) "ISO-8859-1" ["internal_encoding"]=> string(5) "UTF-8"
    这个是我的encoding
      

  7.   

    本帖最后由 xuzuning 于 2012-11-28 12:36:15 编辑
      

  8.   

    我需要看到未经处理的(直接取出来)的数据的 bas64 编码
      

  9.   

    这个就是我读取出数据库,在utf-8的php页面,直接输出的结果
      

  10.   

    我需要关闭php页面所有的charset,然后弄个干净的效果出来吗?如果需要我就去弄个!
      

  11.   

    $db=mssql_connect("localhost","sa","abcde123"); 
    $d=mssql_select_db("spos", $db); 
    $sql = "select cdescription from prodmast_hd where baseitem='AN000001'"; 
    $res = mssql_query($sql); 
    $row = mssql_fetch_array($res); 
    $data = $row['cdescription']; 
    //$data = substr($data,78); 
    echo base64_encode($data); 
    mssql_close(); 
    然后页面出来的结果是:Pz8=
    在数据库里面直接看中文是:项链
    $db=mssql_connect("localhost","sa","abcde123"); 
    $d=mssql_select_db("spos", $db); 
    $sql = "select brandname from prodmast_hd where baseitem='AN000001'"; 
    $res = mssql_query($sql); 
    $row = mssql_fetch_array($res); 
    $data = $row['brandname']; 
    //$data = substr($data,78); 
    echo base64_encode($data); 
    mssql_close(); 这里出来的效果是:Pz8/Pw==
    中文是:公共品牌$db=mssql_connect("localhost","sa","abcde123"); 
    $d=mssql_select_db("spos", $db); 
    $sql = "select baseitem from prodmast_hd where baseitem='AN000001'"; 
    $res = mssql_query($sql); 
    $row = mssql_fetch_array($res); 
    $data = $row['baseitem']; 
    //$data = substr($data,78); 
    echo base64_encode($data); 
    mssql_close(); 结果是:QU4wMDAwMDE=
    数据库里是:AN000001
      

  12.   

    $db=mssql_connect("localhost","sa","abcde123"); 
    $d=mssql_select_db("spos", $db); 
    $sql = "select user_name from product_user where user_login_name='abcdef'"; 
    $res = mssql_query($sql); 
    $row = mssql_fetch_array($res); 
    $data = $row['user_name']; 
    //$data = substr($data,78); 
    echo $data;
    echo "<br>";
    echo base64_encode($data); 
    mssql_close(); 这个是我自己通过网页写进数据库的内容:
    显示结果:
    哈哈
    5ZOI5ZOI但是数据库里看到的就是:哈哈
      

  13.   

    $db=mssql_connect("localhost","sa","abcde123"); 
    $d=mssql_select_db("spos", $db); 
    $sql = "select '项链' as cdescription from prodmast_hd where baseitem='AN000001'"; 
    $res = mssql_query($sql); 
    $row = mssql_fetch_array($res); 
    $data = $row['cdescription']; 
    //$data = substr($data,78); 
    echo $data;
    echo "<br>";
    echo base64_encode($data); 
    mssql_close(); 结果:
    项链
    6aG56ZO+
      

  14.   

    你的 php.ini 中的 mssql.charset 的值是什么?
    最好将他注释掉对于
    这个是我自己通过网页写进数据库的内容:
    显示结果:
    哈哈
    5ZOI5ZOI
    但是数据库里看到的就是:哈哈比较容易解释
    因为你插入时加了 N 声明,并且你的程序是 utf-8 的
    所以 utf-8 的 哈哈 就被强制解释成了 å“ˆå“ˆ,这是6个unicode字符
    取回来时重新被php转换成了 utf-8 的可知你 mssql.charset = utf-8
      

  15.   

    cdescription 字段是 nvarchar(500)
      

  16.   


    php.ini我注释掉了,你看到的结果是我选择浏览器是unicode/utf-8方式看到的结果,如果用其他方式,就全是??或者乱码了!
      

  17.   

    本帖最后由 xuzuning 于 2012-11-28 15:49:23 编辑
      

  18.   


    php.ini里面没有mssql.charset,只有
    ;default_charset = "utf-8",一直都是没有去掉冒号的状态!
      

  19.   

    是吗?那么你先修改你的程序编码为 gbk 的测试一下
      

  20.   


    我把刚才直接取字段显示的那段内容,整个页面字段效果都改成gbk
    获取数据的结果:都是???
      

  21.   


    是不是因为字段是nvarchar,php不支持nvarchar,所以才这样,我需要怎么更改?
    我看了很多人说,但是没有看到一个说解决了,都是没有结果的帖子
      

  22.   

    我用了不少于4年的 php+mssql(nvarchar类型)从未出现过任何问题
    这不知道你们是怎么弄的
      

  23.   


    因为资料录入客户端是PB写的,是支持多语言版本的。
    我PHP只负责拿资料,不知道是不是这个原因。我也搞不懂了,我都快郁闷死了!
      

  24.   

    不能排除是你的环境设置问题
    不过你可以尝试用 odbc 函数组试一下
      

  25.   

    连接数据库后执行 SET NAMES 'utf8' 或者换成你自己的编码