2 beingwell beingwell 于 2012.12.04 15:49 提问

php通过odbc读取informix数据出现乱码,应该怎么修改?

是修改client locale和database locale还是修改其他?修改成什么?
我是用php调用的,可以通过php语言转换所调用数据编码吗?

网页显示结果如下:

今天日期:12-12-04
险种      单数      保费
����        994     1974911.90
������      20      68230.00
������      10      3750.00
������      52      8026.43
�Ҳ���      24      15090.00
�ϼ�        1100        2070008.33
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title>PHP and ODBC 1</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head>
    <body>


<?php

          $conn=odbc_connect('sky123','picctj','picctj');
        if (($conn)) { 
          echo "今天日期:";
echo date("y-m-d");
          echo odbc_errormsg ($conn );
          echo "</p>\n";
        }

        $sql = "SELECT * from tongji";
        $rs = odbc_exec($conn,$sql);
        echo "<table>";
        echo "<tr><td>险种</td><td>单数</td><td>保费</td></tr>";


        while (odbc_fetch_row($rs))
         {
         $result1 = odbc_result($rs,"xianzhong");
          $result2 = odbc_result($rs,"danshu");
         $result3 = odbc_result($rs,"baofei");

       iconv("Latin-1","gb2312",$result1);//测试的代码

        echo "<tr>";    
         echo "<td>$result1</td>";
         echo "<td>$result2</td>";
         echo "<td>$result3</td>";
         echo "</tr>";
        }
        odbc_close($conn);

        echo "</table>";
    ?>


    </body>
</html>

2个回答

franzhong
franzhong   2012.12.04 16:05
已采纳

乱码现象是由编码未统一造成的
PHP 转码可用如下方式进行转码:

string iconv ( string $in_charset , string $out_charset , string $str );

iconv("UTF-8","gb2312",$str);

beingwell
beingwell 这个下午为了解决乱码问题,都老了半个月。 谢谢你了,是你的回答提示了,谢谢了
大约 5 年之前 回复
beingwell
beingwell 解决了。我把头文件里的 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 删除就好了。。
大约 5 年之前 回复
franzhong
franzhong 出错,把文件改为无bom头,你这个不好弄了,因为db编码是Latin-1,是存什么编码都可以的类型,数据是你存的吗,存的时候是啥编码,与其统一测试一下,谁设计的数据库为啥不选utf-8或是gbk不是更好维护吗,对于mysql数据库可以SET NAMES 'utf8'来设置连接时的编码(可以搜了解一下),历来解决乱码问题我总结过都是查几个地方编码,只要统一,绝对不会乱码,缕试不爽,地方有:database(库) table(表) column(段)/这是数据库三地方,连数据库时的set names,php文件的header与浏览器的meta,五个地方都统一我还未见过解决不了的,对于不统一的,就得强硬转码,iconv这个函数,你是这个$in_charset不确定,我要是你我就只能轮翻测试几个常用的,gb2312 utf-8 gbk看看这三个是否正确,我现在怀疑你的db不是latin-1
大约 5 年之前 回复
beingwell
beingwell 请大神帮忙了
大约 5 年之前 回复
beingwell
beingwell 实在不会了,我把所有代码都发过来了,看应该怎么弄!谢谢了
大约 5 年之前 回复
beingwell
beingwell 我试着添加了,确实有这个错误header already sent。
大约 5 年之前 回复
franzhong
franzhong 头文件 header('Content-Type:text/html;charset=gbk');你可以试一下,前提是你的文件是无bom头的,不然会有header already sent错误,iso8859-1是Latin-1用这个存中文?你确定就好(默认设置),虽然这是可以的但是不是提倡的,维护不便:SHOW VARIABLES LIKE 'character%'; SHOW VARIABLES LIKE 'collation_%';这是查看相关编码可以测试一下
大约 5 年之前 回复
beingwell
beingwell 是不是还需要有个头文件?
大约 5 年之前 回复
beingwell
beingwell 谢谢你的耐心回答,【我们的编码是iso8859-1,结果里xianzhong是汉字,但是显示乱码。所以我转换$result1,但还是不行。我的网站是gbk的】
大约 5 年之前 回复
franzhong
franzhong 你数据库是啥编码?我给你的是样例,是那样调用的,但是两个码要与你的需求符合啊,前一个是你数据库码,后一个是你当前使用的想让他变成和与你php文件相统一的编码,明白没,再试试
大约 5 年之前 回复
beingwell
beingwell 我把源码写到问题里了,还是不行。
大约 5 年之前 回复
beingwell
beingwell 谢谢,我先试试
大约 5 年之前 回复
shenjinpeng
shenjinpeng   2016.02.26 01:02

我还在纳闷,怎么保险公司都用informix数据库,看数据库命名瞬间明白了图片说明图片说明图片说明……我用.net也是中文乱码问题

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!