首页 > 语言 > 关键词  > gb转utf-8最新资讯  > 正文

php对gb编码动态转utf-8编码的几种方法评测

2008-08-21 11:51 · 稿源:互联网

在《IP地址->地理位置转换的测评》一文中提到用ip2addr函数直接读取IP数据库文件是效率最高的,相比用MySQL数据库存储IP数据,用SQL查询是效率最低的。但是IP数据库文件QQWry.dat是GB2312编码的。现在我需要UTF-8编码的地理位置结果。如果用MySQL方法,可以在数据存入数据库时就转换为UTF-8编码,一劳永逸。但是QQWry.dat文件又无法修改,只能把ip2addr函数的输出结果再进行动态转换。

动态转换GB->UTF-8编码至少有四种方法:

用PHP的iconv扩展转换

用PHP的mb_string扩展转换

用对换表转换,对换表存储在MySQL数据库中

用对换表转换,对换表存储在文本文件中

前两种方法要服务器作了相应设置(编译安装了相应扩展)才能使用。我的虚拟主机没有这两个扩展,只好考虑后两种方法。前两个方法本文也不进行测评。

测评程序如下(func_ip.php参见《IP地址->地理位置转换的测评》一文):



<?php
require_once ("func_ip.php");
function u2utf8($c) {
  $str = "";
  if ($c < 0x80) {
    $str .= $c;
  } elseif ($c < 0x800) {
    $str .= chr(0xC0 | $c >> 6);
    $str .= chr(0x80 | $c & 0x3F);
  } elseif ($c < 0x10000) {
    $str .= chr(0xE0 | $c >> 12);
    $str .= chr(0x80 | $c >> 6 & 0x3F);
    $str .= chr(0x80 | $c & 0x3F);
  } elseif ($c < 0x200000) {
    $str .= chr(0xF0 | $c >> 18);
    $str .= chr(0x80 | $c >> 12 & 0x3F);
    $str .= chr(0x80 | $c >> 6 & 0x3F);
    $str .= chr(0x80 | $c & 0x3F);
  }
  return $str;
}
function GB2UTF8_SQL($strGB) {
  if (!trim($strGB)) return $strGB;
  $strRet = "";
  $intLen = strlen($strGB);
  for ($i = 0; $i < $intLen; $i++) {
    if (ord($strGB{$i}) > 127) {
        $strCurr = substr($strGB, $i, 2);
        $intGB = hexdec(bin2hex($strCurr)) - 0x8080;
        $strSql = "SELECT code_unicode FROM nnstats_gb_unicode
          WHERE code_gb = ".$intGB." LIMIT 1"
        ;
        $resResult = mysql_query($strSql);
        if ($arrCode = mysql_fetch_array($resResult)) $strRet .= u2utf8($arrCode["code_unicode"]);
        else $strRet .= "??";
        $i++;
    } else {
        $strRet .= $strGB{$i};
    }
  }
  return $strRet;
}
function GB2UTF8_FILE($strGB) {
  if (!trim($strGB)) return $strGB;
  $arrLines = file("gb_unicode.txt");
  foreach ($arrLines as $strLine) {
    $arrCodeTable[hexdec(substr($strLine, 0, 6))] = hexdec(substr($strLine, 7, 6));
  }
  $strRet = "";
  $intLen = strlen($strGB);
  for ($i = 0; $i < $intLen; $i++) {
    if (ord($strGB{$i}) > 127) {
        $strCurr = substr($strGB, $i, 2);
        $intGB = hexdec(bin2hex($strCurr)) - 0x8080;
        if ($arrCodeTable[$intGB]) $strRet .= u2utf8($arrCodeTable[$intGB]);
        else $strRet .= "??";
        $i++;
    } else {
        $strRet .= $strGB{$i};
    }
  }
  return $strRet;
}
function EncodeIp($strDotquadIp) {
  $arrIpSep = explode('.', $strDotquadIp);
  if (count($arrIpSep) != 4) return 0;
  $intIp = 0;  
  foreach ($arrIpSep as $k => $v) $intIp += (int)$v * pow(256, 3 - $k);
  return $intIp;
  //return sprintf('%02x%02x%02x%02x', $arrIpSep[0], $arrIpSep[1], $arrIpSep[2], $arrIpSep[3]);
}
function GetMicroTime() {
  list($msec, $sec) = explode(" ", microtime());
  return ((double)$msec + (double)$sec);
}
for ($i = 0; $i < 100; $i++) { // 随机产生100个ip地址
  $strIp = mt_rand(0, 255).".".mt_rand(0, 255).".".mt_rand(0, 255).".".mt_rand(0, 255);
  $arrAddr[$i] = ip2addr(EncodeIp($strIp));
}
$resConn = mysql_connect("localhost", "netnest", "netnest");
mysql_select_db("test");
// 测评MySQL查询的编码转换
$dblTimeStart = GetMicroTime();
for ($i = 0; $i < 100; $i++) {
  $strUTF8Region = GB2UTF8_SQL($arrAddr[$i]["region"]);
  $strUTF8Address = GB2UTF8_SQL($arrAddr[$i]["address"]);
}
$dblTimeDuration = GetMicroTime() - $dblTimeStart;
// 测评结束并输出结果
echo $dblTimeDuration; echo "\r\n";
// 测评文本文件查询的编码转换
$dblTimeStart = GetMicroTime();
for ($i = 0; $i < 100; $i++) {
  $strUTF8Region = GB2UTF8_FILE($arrAddr[$i]["region"]);
  $strUTF8Address = GB2UTF8_FILE($arrAddr[$i]["address"]);
}
$dblTimeDuration = GetMicroTime() - $dblTimeStart;
// 测评结束并输出结果
echo $dblTimeDuration; echo "\r\n";
?>

测评两次结果(精确到3位小数,单位是秒):

MySQL查询转换:0.112
文本查询转换:10.590

MySQL查询转换:0.099
文本查询转换:10.623

举报

  • 相关推荐
  • 字节、腾讯、阿里,AI 编码“三国杀”

    大厂正在集火最具PMF(产品市场契合度)价值的赛道——AI编码。 从7月21日开始,字节、腾讯、阿里轮番更新AI编码产品和模型:字节已有的AI编码产品Trae放出Solo版本,加入上下文工程,让平台变得更“聪明”;腾讯则把一整套用来部署产品的工具放到其中,做了个“全栈工程师”;阿里更是发布编程大模型Qwen3-Coder剑指Claude4,直接从模型层下功夫。 在Cursor面向中国市场取消了An

  • 瓴羊Dataphin 智能升级:编码难题一扫光,开发运维更高效!

    Dataphin V5.1.2智能版本推出三大核心功能:1)智能编码助手:通过自然语言交互自动生成SQL代码,支持代码补全和结构化输出,提升开发效率;2)智能运维助手:提供任务状态可视化监控、异常诊断和一键重跑功能,实现全链路运维管理;3)智能分析助手:基于分析专辑构建自然语言查询系统,支持多轮追问和SQL自由编辑,让非技术人员也能快速获取数据洞察。新版本通过AI技术重构数据开发体验,实现"会写、能懂、秒查"的智能化目标,满足从开发到分析的全场景需求。

  • 曝iPhone17Pro起始存储翻倍 或取消128GB

    苹果即将于2025年发布的iPhone17Pro系列将迎来重大存储升级,入门机型容量从现行的128GB直接提升至256GB,但起售价也将同步上涨50美元至1049美元(约合人民币7500元)。这一调整意味着该系列将彻底取消128GB版本,实现全系256GB起步。 尽管定价较前代128GB机型有所提高,但对比当前256GB版本的iPhone16Pro(售价1099美元),消费者仍能享受50美元的价格优惠。

  • 抖音低价加码酒旅,OTA群战升级

    继外卖补贴热战之后,酒旅也暗潮涌动。 最新消息是,抖音本地生活在暑期将投入亿元级对酒旅做补贴,联合华住、凯悦等酒店集团推出6 折订房优惠,新客专享价等。抵达用户的通道,除品牌酒店集团矩阵号、职人号直播间,还有抖音日历房。 针对酒旅行业的进击行动,抖音是今年的第三个玩家。 在此之前,京东于618 当天打出「三年0佣金」政策吸引酒店入驻,立志重构O

  • 从构建方法论到服务加码,华为加速释放AI时代制造业数智潜能

    华为提出"三层五阶八步"数字化转型方法论,助力制造业企业应对AI时代挑战。文章指出制造业数字化转型面临技术架构创新、服务体系重构和人才技能升级三大挑战。华为通过重构"规划-建设-运营-迭代"一体化服务体系和"线下+线上"协同模式,已在汽车制造等领域实现研发效率提升30%、排产效率提升20%等显著成效。其核心在于将工业Know-how与AI技术深度融合,通过生态协同释放产业潜能。目前华为已建立覆盖全国2800个区县的服务网络,联合2500家伙伴构建智能制造解决方案。文章强调真正的智造不仅是技术突破,更要让每个产业细胞在变革中焕发新生。

  • AI日报:GPT-5-Auto现身Mac客户端;阿里开源WebAgent项目WebShaper;腾讯推X-Omni多模态模型

    【AI日报】今日AI领域重要动态:1)阿里开源WebAgent项目WebShaper,GAIA评测超越Claude4-Sonnet;2)Moonvalley推出草图转视频功能,支持手绘生成电影级视频;3)腾讯X-Omni模型实现图文理解重大突破;4)百度搜索测试AI应用中心入口;5)Midjourney+新增个性化推荐功能;6)GPT-5或于2025年夏季发布;7)Ollama推出桌面客户端;8)OWL团队开源多智能体协作工具Eigent;9)OpenAI年收入激增至120亿美元;10)英伟达H20芯片因安全风险被约谈;11)万兴科技天幕2.0模型国内排名第四,与华为云共建AI视频实验室。

  • 远超行业标准!研祥金码读码器寿命突破40000小时

    Regem Marr研祥金码智能读码器通过严格测试,产品寿命超4万小时,可持续稳定运行至少4.5年。采用铝合金多开孔支架,散热性能优异,CPU温度降低27%,机壳温度降低37%。宽温设计使工作温度范围达-25℃至55℃,适应食品冷库、高温锻造等极端环境。防护等级达IP65,高于国家标准3个防尘等级和5个防水等级,实现防水防尘。产品经过高温高湿等复杂环境测试,确保各类场景下的稳定运行能力。

  • iQOO Z10 Turbo+首销战绩公布:为Z10 Turbo Pro的174%

    iQOO品牌正式发布了其全新旗舰机型iQOO Z10Turbo+,并同步开启销售。这款新机以其卓越的性能和超长续航能力迅速吸引了市场关注,官方数据显示,其首销成绩达到了此前Z10Turbo Pro的174%,显示出消费者对其的高度认可。 iQOO Z10Turbo+的核心亮点在于其搭载的8000mAh超大容量电池,这在当前的智能手机市场中极为罕见。该机型不仅配备了天玑9400+旗舰处理器,还配备了旗舰级的LPDDR5X U

  • 一条视频狂揽240W点赞,怀旧旅行成抖音流量密码?

    ​一条模拟90年代旅行方式的视频最近在抖音火了。 7月30日,拥有近700万粉丝的抖音精选旅行作者@ahua 发布了一条记录自己徒步之旅的作品,发布24小时后,点赞量便突破100万。截至发稿前,该视频点赞量已超过240万。 在这条视频中,@ahua 选择不依靠电子地图、不携带智能手机,开展了一场与世界失联168小时、从南疆走到北疆的徒步旅程。几千米的海拔落差,让四季堆叠在列

  • 10后小孩靠做饭Vlog涨粉百万,戳中了哪些流量密码?

    ​见惯了打工人的生活日常,你见过小学生的放学做饭日常吗? 近期,一批10后“小孩哥”“小孩姐”凭借做饭Vlog在网络上刷屏,他们娴熟的厨艺与稚嫩的外表形成强烈反差:10后小女孩站在灶台前动作娴熟地颠勺翻炒,上二年级的小男孩在菜市场熟练地和摊主讨价还价,回家后做出三菜一汤…… 这种反差感极强的场景,正通过短视频平台持续发酵,单个视频甚至收获超500万的

热文

  • 3 天
  • 7天