用PHP直接从QQWry.dat解析IP地址的程序(编码为utf8)小记
今天无事,修改了一个显示访问的IP所对应的地区或详细地址的程序,于是我就用到了,纯真版的QQWry.dat数据库,而且也有一个读取改数据库的PHP文件qqwry.php,代码如下:
现在的问题是,网站全用的utf8编码,但是这个读取数据库的PHP程序好像是GB2321的编码方式,而且怎么也改不了UTF8的,不知 道哪个地方错误,所以显示出来的地区就全部是乱码,不能正常显示,所以如果哪位能帮我改下编码或者有更好的程序还请帮个忙!
[php]
<?php
#本文件编辑必须是GB2312
#文件名:QQWry.php
/*++++++++++++++++++++++++++++++++++++
程序名称:IP解析程序
程序功能:基于QQ的二进制数据库QQWry.Dat
程序作者:未知
使用方法:
请将文件 QQWry.Dat 置于当前目录中
#实例+++++++++++++++++++++++++++++++
$ip="202.201.48.1";#
$QQWry=new QQWry;
$ifErr=$QQWry->QQWry($ip);
echo "$QQWry->Country$QQWry->Local";
+++++++++++++++++++++++++++++++++++++
ip.php是测试程序
++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++*/
define('__QQWRY__' , dirname(__FILE__)."/qqwry.dat");
//echo __QQWRY__;
class QQWry{
var $StartIP=0;
var $EndIP=0;
var $Country='';
var $Local='';
var $CountryFlag=0; // 标识 Country位置
// 0x01,随后3字节为Country偏移,没有Local
// 0x02,随后3字节为Country偏移,接着是Local
// 其他,Country,Local,Local有类似的压缩。可能多重引用。
var $fp;
var $FirstStartIp=0;
var $LastStartIp=0;
var $EndIpOff=0 ;
function getStartIp($RecNo){
$offset=$this->FirstStartIp+$RecNo * 7 ;
@fseek($this->fp,$offset,SEEK_SET) ;
$buf=fread($this->fp ,7) ;
$this->EndIpOff=ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])* 256*256);
$this->StartIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
return $this->StartIp;
}
function getEndIp(){
@fseek ( $this->fp , $this->EndIpOff , SEEK_SET ) ;