如何将gb2312转换为utf-8

bluenet21 2006-06-28 03:05:02
服务器不支持iconv,想找个替代方案。
谢谢!
...全文
1006 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lostgdi731 2006-07-17
  • 打赏
  • 举报
回复
fun_gb2utf8.php:
<?
//不用iconv库的gb2312与utf-8的互换函数//对照表的使用
function get_charset(){
$filename = "fun_gb2utf8.txt";
$fp = fopen($filename,"r");
while(! feof($fp)) {
list($gb,$utf8) = fgetcsv($fp,10);
$charset[$gb] = $utf8;
}
fclose($fp);
return $charset;
}

//以上读取对照表到数组备用


/** gb2312到utf-8 **/
function gb2utf8($text, &$charset) {
//提取文本中的成分,汉字为一个元素,连续的非汉字为一个元素
preg_match_all("/(?:[\x80-\xff].)|[\x01-\x7f]+/",$text,$tmp);
$tmp = $tmp[0];
//分离出汉字
$ar = array_intersect($tmp, array_keys($charset));
//替换汉字编码
foreach($ar as $k=>$v) {
$tmp[$k] = $charset[$v];
}
//返回换码后的串
return join('',$tmp);
}

/** utf-8到gb2312 **/
function utf82gb($text, &$charset) {
$p = "/[\xf0-\xf7][\x80-\xbf]{3}|[\xe0-\xef][\x80-\xbf]{2}|[\xc2-\xdf][\x80-\xbf]|[\x01-\x7f]+/";
preg_match_all($p,$text,$r);
$utf8 = array_flip($charset);
foreach($r[0] as $k => $v) {
if(isset($utf8[$v])) {
$r[0][$k] = $utf8[$v];
}
}
return join('',$r[0]);
}

/*
//调用示例
$gb2utf_charset=get_charset();
$strhan = "测试汉字GB转换为UTF8,测试汉字UTF8转换为GB。";
echo " strhan(".strlen($strhan).")=".$strhan." <br/>\n";
$strhan_ut=gb2utf8($strhan, $gb2utf_charset);
echo " strhan(".strlen($strhan_ut).")=".$strhan_ut." <br/>\n";
$strhan_gb=utf82gb($strhan_ut_i, $gb2utf_charset);
echo " strhan(".strlen($strhan_gb).")=".$strhan_gb." <br/>\n";
*/

?>

这个文件: fun_gb2utf8.txt 好象网上没有,你要的加我Q我发给你。56079024
lantersen 2006-07-17
  • 打赏
  • 举报
回复
mb_convert_encoding
(PHP 4 >= 4.0.6, PHP 5)
mb_convert_encoding -- Convert character encoding

$str = mb_convert_encoding($str, "UTF-8","GB2312");
levopat 2006-07-04
  • 打赏
  • 举报
回复
<?php
$v = new convert;
echo 'test'.$v->UTF2gb('转换了');

class convert {
//gb2312和utf-8对应的编码文件
var $filename = "gb2312.txt";
var $codetable = array(); //码表读取后存入这个数组
//构造函数
function convert() {
$tmp = file($this->filename);
while( list($key,$value) = each($tmp) )
$this->codetable[hexdec(substr($value,0,6))] = substr($value,7,6);
}

//GB->UTF-8
function toUTF8($gb) {
//转换过程可参考上面列出的文章,这里就不贴了
return $utf8;
}

function UTF2gb($str) {
if( !trim($str) )
return $str;
$reverse = array();
while( list($key,$value) = each($this->codetable) )
$reverse[hexdec($value)] = $key;
$gb = "";
while($str) {
if ( ord(substr($str,0,1))>0xE0 )
{
$tmp = substr($str,0,3);
$str = substr($str,3,strlen($str));
$utf = hexdec(bin2hex($tmp));
$unicode = (($utf & 0x0F0000)>>4) | (($utf & 0x3F00)>>2)
| ($utf & 0x3F) ;
$gb = $gb . pack("n",($reverse[$unicode])|0x8080 );
}
else
{
$gb = $gb . substr($str,0,1);
$str = substr($str,1,strlen($str));


}
}
return $gb;
}
}
?>
黑夜路人 2006-07-04
  • 打赏
  • 举报
回复
php有很多扩展,比如iconv和mbstring就是做这个滴
嗯,当然也可以是使用php来实现,不过效率比较低,还是使用扩展比较好,速度快,而且还稳定,不过iconv0.9有bug,个人推荐使用mbstring就OK了
ImN1 2006-06-28
  • 打赏
  • 举报
回复
用javascript
不过反向utf8->gb2312就不行了
Gdj 2006-06-28
  • 打赏
  • 举报
回复
查表

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧