登录站点

用户名

密码

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

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

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

$arrfield[2] = 'blogid,tag,drmshk_uchome_blogfield';
$arrfield[3] = 'blogid,related,drmshk_uchome_blogfield';

$arrfield[4] = 'var,datavalue,drmshk_uchome_data';

$arrfield[5] = 'sid,body_data,drmshk_uchome_share';

$arrfield[6] = 'adid,adcode,drmshk_uchome_ad';

//对原数据库中的序列化数据进行重新序列化修复
function new_serialize($m){  
$len = strlen($m[2]); //转换关键操作
return 's:'.$len.':"'.$m[2].'";';        
}
foreach($arrfield as $field){
        $r = explode(',',$field);
        $rid = $r[0];
        $rfield = $r[1];
        $rtable = $r[2];
        $query = $_SGLOBAL['db']->query("SELECT $rid,$rfield FROM ".$rtable); //drmshk_uchomeome
        while ($value = $_SGLOBAL['db']->fetch_array($query)) {
                $data = $value[$rfield];        
                $tid = $value[$rid];
                echo $data."\n<br>";                
                $data = preg_replace_callback('/s:([0-9]+?):"([\s\S]*?)";/','new_serialize',$data);
                $data = addslashes($data);                
                $_SGLOBAL['db']->query("update `$rtable` set `$rfield`='$data' where `$rid`='$tid'");
        }
        echo '<hr>';
}        
echo '<font color=red>转换成功!</font>';
exit;
?>
分享 举报