如何将gb2312转换为utf-8 用javascript不过反向utf8->gb2312就不行了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <?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; }} ?> php有很多扩展,比如iconv和mbstring就是做这个滴嗯,当然也可以是使用php来实现,不过效率比较低,还是使用扩展比较好,速度快,而且还稳定,不过iconv0.9有bug,个人推荐使用mbstring就OK了 mb_convert_encoding(PHP 4 >= 4.0.6, PHP 5)mb_convert_encoding -- Convert character encoding$str = mb_convert_encoding($str, "UTF-8","GB2312"); 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 急,IE6不缓存图片的问题!老大们帮忙快 php使对象可以像数组一样进行foreach循环 ,在foreach循环里进行对值处理,然后怎么样添加到一个新的数组里面? PHP如何调用页面? 遇到奇怪的事情,高手帮忙解决一下 如何用php如何把本地的一个word文档中的内容读到数据库中,并且把word的格式转成html格式(字体、颜色、空格等) 初学PHP 有些PHP书写问题请指较... 关于提交重复的问题 我老是碰到的警告提示~~帮我看看 为什么数据库用什么都可以进去。 php在安全性方面较之asp由那些优势? Linux下,多台Apache+php服务器如何架构负载均衡? 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;
}
}
?>
嗯,当然也可以是使用php来实现,不过效率比较低,还是使用扩展比较好,速度快,而且还稳定,不过iconv0.9有bug,个人推荐使用mbstring就OK了
(PHP 4 >= 4.0.6, PHP 5)
mb_convert_encoding -- Convert character encoding$str = mb_convert_encoding($str, "UTF-8","GB2312");
<?
//不用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