Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

uchome网站gbk,utf8编码数据的完美转化程序

[复制链接]
hiqq 发表于 2009-2-23 18:03:20 | 显示全部楼层 |阅读模式
UCHome插件
语言编码: UTF8简体 
插件名称: uchome反序列化数据的编码修复
插件作者: hiqq
适用版本:
本帖最后由 hiqq 于 2009-2-24 00:10 编辑
用了一个晚上,在本机成功实现discuz,ucenter,uchome从gbk到utf8的转化,ucenter和discuz转化起来比较方便,只需要将数据库和代码文件转为utf即可, 而uchome就相对麻烦些,里面有很多序列化数据,在初步转化后,userialize失效,无法读出, 这是因为不同编码的中文字节长度有区别, 故开发以下数据修复程序,可实现utf8-gbk,gbk-utf8,以及更多编码数据之间的完美转化.

开发时间仓促,一些不当细节还请包涵!
原文来自: http://bbs.hiqq.com.cn/49171-1-1/

  1. <?php
  2. //文件名称:uchome序列化(serialize)数据修复程序
  3. //程序说明:本程序针对uchome编写,其它应用请自行做响应修改
  4. //         将已经序列化(serialize)的数据根据当前数据编码进行序列化修复;
  5. //         解决编码转化后,对序列化数据进行反序列化(unserialize)时无返回值的问题;
  6. //         可用于gbk,utf等编码之间的互相转化;
  7. //         目标编码为目标数据库编码;
  8. //程序使用:将此文件复制到uchome根目录下运行,运行前建议先将原数据备份;
  9. //         使用前请先将数据库及本程序文件转化为目标编码
  10. //成功案例:本程序已经完美实现uchome的gbk版本到utf-8版本的转化。简要步骤:
  11. //         1 数据库编码转化:方案一:安装一套uchome全新的utf版本,将所有表数据清空,再将原数据库的导出数据(使用phpMyAdmin,仅导出数据,不导出表结构)导入即可;方案二:使用phpMyAdmin将原数据和表结构导出为sql文件,在导出文件中替换所有charset=gbk为charset=utf8,新建数据库,将替换后数据导入即可。
  12. //         2 代码文件编码转化:方案一:安装全新uchome程序文件;方案二:使用covertz编码转化软件将代码转化为utf(无bom),再修改cofig.inc.php中的编码设置。
  13. //         3 将此文件复制到uchome根目录下运行;
  14. //         4 登陆后台,更新全站缓存,大功告成!

  15. include_once('./common.php'); //uchome
  16. $arrfield = array();
  17. $arrfield[0] = 'feedid,title_data,uch_feed'; //分别为主键名,需要数据转换的字段名,表名
  18. $arrfield[1] = 'feedid,body_data,uch_feed';

  19. $arrfield[2] = 'blogid,tag,uch_blogfield';
  20. $arrfield[3] = 'blogid,related,uch_blogfield';

  21. $arrfield[4] = 'var,datavalue,uch_data';

  22. $arrfield[5] = 'sid,body_data,uch_share';

  23. $arrfield[6] = 'adid,adcode,uch_ad';

  24. //对原数据库中的序列化数据进行重新序列化修复
  25. function new_serialize($m){  
  26. $len = strlen($m[2]); //转换关键操作
  27. return 's:'.$len.':"'.$m[2].'";';        
  28. }
  29. foreach($arrfield as $field){
  30.         $r = explode(',',$field);
  31.         $rid = $r[0];
  32.         $rfield = $r[1];
  33.         $rtable = $r[2];
  34.         $query = $_SGLOBAL['db']->query("SELECT $rid,$rfield FROM ".$rtable); //uchome
  35.         while ($value = $_SGLOBAL['db']->fetch_array($query)) {
  36.                 $data = $value[$rfield];        
  37.                 $tid = $value[$rid];
  38.                 echo $data."\n<br>";               
  39.                 $data = preg_replace_callback('/s:([0-9]+?):"([\s\S]*?)";/','new_serialize',$data);
  40.                 $data = addslashes($data);               
  41.                 $_SGLOBAL['db']->query("update `$rtable` set `$rfield`='$data' where `$rid`='$tid'");
  42.         }
  43.         echo '<hr>';
  44. }        
  45. echo '<font color=red>转换成功!</font>';
  46. exit;
  47. ?>
复制代码
yclxc 发表于 2009-2-23 18:56:07 | 显示全部楼层
欣赏楼主的个人形象((mk13))
回复

使用道具 举报

 楼主| hiqq 发表于 2009-2-24 00:42:53 | 显示全部楼层
补充: uchome成功实现gbk-utf8数据编码转化的网站:
http://home.hiqq.com.cn/
回复

使用道具 举报

流星雪影 发表于 2009-2-24 11:09:40 | 显示全部楼层
回复

使用道具 举报

abcnic 发表于 2009-2-24 11:14:49 | 显示全部楼层
留个记号看看
回复

使用道具 举报

075016 发表于 2010-12-7 14:08:43 | 显示全部楼层
留个记号看看
回复

使用道具 举报

ruziniu05100 发表于 2012-4-21 07:32:38 | 显示全部楼层
终于找到了,谢谢啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-24 01:33 , Processed in 0.020123 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表