今天群里有人问一个网站的GBK字符转换UTF的问题
无聊网上搜了下找到这个PHP网页源码。
复制内容然后存为PHP代码即可,建议在本机上面测试预防不测~
[code]
<?php
/*$mysql_host = 'localhost'; //MySQL主机
$mysql_user = 'root'; //MySQL用户名
$mysql_psword = ''; //MySQL密码
$fromdb = ''; //原本数据库
$intodb = ''; //新的空数据库
$per = 20; //每次跳转处理的数据库条数
$intodbcharset = 'gbk'; //设置的编码
*/
/*
本程序可以实现latin1<->gbk,gbk<->utf8,gbk<->big5,的编码的相互转换,程序可以进行多次转换即可以实现latin->gbk->utf8等的转换
*/
$phpselfname=$_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
@set_time_limit(0);
error_reporting(7);
define('D_P',__FILE__ ? dirname(__FILE__).'/' : './');
foreach($_POST as $_key=>$_value){
!ereg("^\_",$_key) && $$_key=$_POST[$_key];
}
foreach($_GET as $_key=>$_value){
!ereg("^\_",$_key) && $$_key=$_GET[$_key];
}
$charsetdb=array('latin1'=>'gbk','gbk'=>'utf8','gbk'=>'big5');
if(!$action){
echo "<table align=center><tr><td>本程序的作用:转换数据库编码。</td></tr& gt;<tr><td><font color=\"#FF0000\">警告:如果您填写的目的数据库已经存在,<br>原来的数据将被删除并重建空的新数据库< /font></td></tr></table>";
$charsets=array('big5','gbk','latin1','utf8');
$options="<option value=\"\">";
foreach($charsets as $value){
$options.="<option value=\"$value\">$value";
}
echo "<form method=post action=\"$phpselfname\">
<input type=\"hidden\" name=\"action\" value=\"creattable\">
<table align=center>
<tr>
<td colspan=2>请先设置以下参数:</td>
</tr>
<tr>
<td>数据库主机:</td>
<td><input type=\"text\" name=\"mysql_host\" value=\"localhost\"></td>
</tr>
<tr>
<td>数据库用户名:</td>
<td><input type=\"text\" name=\"mysql_user\"></td>
</tr>
<tr>
<td>数据库密码:</td>
<td><input type=\"text\" name=\"mysql_psword\"></td>
</tr>
<tr>
<td>源数据库名:</td>
<td><input type=\"text\" name=\"fromdb\"></td>
</tr>
<tr>
<td>目的数据库名:</td>
<td><input type=\"text\" name=\"intodb\"></td>
</tr>
<tr>
<td colspan=2><font size=\"1\" color=\"#3300FF\">创建一个新的空数据库,建议不要填写以有的数据库名</font></td>
</tr>
<tr>
<td>目的数据库编码设置:</td>
<td><select name=\"intodbcharset\">$options</select></td>
</tr>
<tr>
<td colspan=2><font size=\"1\" color=\"#3300FF\">编码转换限制说明:latin1<->gbk,gbk<->utf8,gbk& lt;->big5</font></td>
</tr>
<tr>
<td>每次跳转处理数据条数:</td>
<td><input type=\"text\" name=\"per\" value=2000></td>
</tr>
<tr>
<td colspan=2><font size=\"1\" color=\"#3300FF\">如果涉及big5的转换,请设置的尽量小点本人在本地机<br>子上测试只能一次转换五六十个& lt;/font></td>
</tr>
<tr>
<td colspan=2 align=center><input type=\"submit\" value=\"开始运行\"></td>
</tr>
</table></form>";
exit;
}
!$mysql_host && Showmsg("请填写数据库主机!",$phpselfname);
!$mysql_user && Showmsg("请填写数据库用户名!",$phpselfname);
!$fromdb && Showmsg("请填写要处理的源数据库",$phpselfname);
!$intodb && Showmsg("请填写要保存的新的数据库名(将被创建,如果已经存在将被删除重新创建)",$phpselfname);
!$per && Showmsg("请填写每次跳转处理的数据库条数,必须为整数!",$phpselfname);
!$intodbcharset && Showmsg("请选择新数据的编码!",$phpselfname);
$andurl="mysql_host=$mysql_host&mysql_user=$mysql_user&mysql_psword=$mysql_psword&fromdb=$fromdb&intodb=$intodb&per=$per&intodbcharset=$intodbcharset";
!$start && $start=0;
!$part && $part=0;
$mysql = mysql_connect($mysql_host,$mysql_user,$mysql_psword) or die("Could not connect : " . mysql_error());
//mysql_query("SET NAMES '$fromdbcharset'");
mysql_query("SET sql_mode=''");
@mysql_select_db($fromdb) or die("源数据库 $fromdb 不存在!");
$tablesdb=array();
$Tables_in='Tables_in_'.$fromdb;
$query=mysql_query("SHOW TABLES");
while($rt=mysql_fetch_array($query,MYSQL_ASSOC)){
$tablesdb[]=$rt;
}
$table=$tablesdb[$part][$Tables_in];
$tableinfo=array();
$query=mysql_query("SHOW TABLE STATUS LIKE '$table'");
while($rt=mysql_fetch_array($query,MYSQL_ASSOC)){
$charsetpos=strpos($rt['Collation'],'_')===false ? -1 : strpos($rt['Collation'],'_');
$rt['Collation']=substr($rt['Collation'],0,$charsetpos);
$tableinfo=$rt;
}
if($charsetdb[$tableinfo['Collation']]!=$intodbcharset && $charsetdb[$intodbcharset]!=$tableinfo['Collation'] ){
Showmsg("编码设置错误!".$tableinfo['Collation']." 编码不能转换为 $intodbcharset 编码",$phpselfname);
}
unset($charsetdb);
mysql_query("SET NAMES '$tableinfo[Collation]'");
if($action=='creattable'){
$tablecreat=array();
foreach ($tablesdb as $key => $value){
$query=mysql_query("SHOW Create TABLE $value[$Tables_in]");
while($rt=mysql_fetch_array($query,MYSQL_ASSOC)){
echo $rt['Create Table'];
$rt['Create Table']=str_replace("$tableinfo[Collation]","$intodbcharset",$rt['Create Table']);
$tablecreat[]=$rt;
}
}
mysql_close($mysql);
$mysql = mysql_connect($mysql_host,$mysql_user,$mysql_psword) or die("Could not connect : " . mysql_error());
mysql_query("Drop DATABASE IF EXISTS `$intodb`") or die("Drop DATABASE failed : " . mysql_error());
if(mysql_get_server_info() > '4.1'){
mysql_query("Create DATABASE `$intodb` DEFAULT CHARACTER SET $intodbcharset") or die("Query failed : " . mysql_error());
}else{
mysql_query("Create DATABASE `$intodb`") or die("Query failed : " . mysql_error());
}
echo "$intodb 数据库创建成功!";
mysql_query("SET NAMES '$intodbcharset'");
if(mysql_get_server_info() > '5.0'){
mysql_query("SET sql_mode=''");
}
@mysql_select_db($intodb) or die("目的数据库 $intodb 不存在!");
foreach ($tablecreat as $key => $value){
mysql_query("Drop TABLE IF EXISTS `$value[Table]`");
mysql_query($value['Create Table']);
echo "$value[Table] 表创建完成<br>";
$conut++;
}
mysql_close($mysql);
echo "所有的表创建完成,数据库共有 $conut 个表!<br>";
redirect("$phpselfname?action=data&$andurl");
}elseif($action=='data'){
$conut=0;
$data=array();
if($table){
echo "正在转移 $table 表的从 $start 条记录开始的后 $per 条记录";
$query=mysql_query("Select * FROM $table LIMIT $start,$per");
while($rt=mysql_fetch_array($query,MYSQL_ASSOC)){
$data[]=$rt;
}
mysql_close($mysql);
unset($rt);
$mysql = mysql_connect($mysql_host,$mysql_user,$mysql_psword) or die("MySQL链接错误!");
if($tableinfo['Collation']=='utf8' || $intodbcharset=='utf8'){
$intodbcharset=$tableinfo['Collation'];
}
mysql_query("SET NAMES '$intodbcharset'");
if(mysql_get_server_info() > '5.0'){
mysql_query("SET sql_mode=''");
}
@mysql_select_db($intodb) or die("phpwind数据库不存在!");
if($start==0){
mysql_query("Delete FROM $table");
}
if($tableinfo['Collation']=='big5' || $intodbcharset=='big5'){
require_once('chinese/chinese.php');
$chs = new Chinese($tableinfo['Collation'],$intodbcharset);
}
foreach($data as $key =>$value){
$sql='';
foreach($value as $key1 => $value1){
if($tableinfo['Collation']=='big5' || $intodbcharset=='big5'){
$value1=$chs->Convert($value1);
}
$value1=addslashes($value1);
$sql=$sql ? $sql.",'".$value1."'" : "'".$value1."'";
}
mysql_query("Insert INTO $table VALUES($sql)") or mysql_errno();
$conut++;
}
mysql_close($mysql);
if($conut==$per){
$start+=$per;
redirect("$phpselfname?action=data∂=$part&start=$start&$andurl");
}else{
$part++;
redirect("$phpselfname?action=data∂=$part&$andurl");
}
}else{
echo "数据库$fromdb 编码 $tableinfo[Collation] 转移到数据库 $intodb 编码 $intodbcharset 完成!";exit;
}
}
function redirect($url) {
echo"<script>";
echo"function redirect() {window.location.replace('$url');}\n";
echo"setTimeout('redirect();', 2000);\n";
echo"</script>";
echo"<br><br><a href=\"$url\">如果您的浏览器没有自动跳转,请点击这里</a>";
exit;
}
function Showmsg($message,$url) {
echo $message,"<br><a href=\"$url\">点这里返回</a>";exit;
}
?>[/code]
×
请土豪扫码随意打赏
打开支付宝扫一扫,即可进行扫码打赏哦
分享从这里开始,精彩与您同在
打赏作者
用心去打造出特色的资源网站,用每一滴汗水换回所有付出所得的喜悦!
发表评论