编码问题utf-8简体字和utf-8繁体字的判断问题

时间:2023-01-05 10:28:25

header("Content-Type: text/html; charset=utf-8");
$a="'鑻辨牸鍏拌冻鐞冭浼氬寳閮ㄨ伅璩?";
$a=trim($a,"'");
echo $a;

//以下是如果字符串统一为简体UFT-8或繁体UFT-8的转换代码
if($is_gb2312){ //简体UFT-8 
         $a=mb_convert_encoding($a,"gb2312","UTF-8");
$a=gb2312_to_big5($a);
}else{//繁体UFT-8
$a=mb_convert_encoding($a,"big5","UTF-8");
}


以前代码输出 英格兰足球议会北部聯賽 

我想将内容统一转为big5或者gb2312保存,因为需要在header("Content-Type: text/html; charset=big5");下输出.
应该如何处理?

望高手指引,感激万分。

11 个解决方案

#1


为啥不用UTF-8啊,你这样维护很麻烦的。

而且没看明白你想做什么,header里面已经设置了utf-8输出,你后面为什么还要做转换?

#2


因为这是一个附加的功能,原系统已经做好了,用的是charset=big5。上面的数据是从网页上取回来的,那个网上就是用utf-8。

#3


那你的操作顺序错了,应该是这样:
<?php
//获取网页内容

//以下是如果字符串统一为简体UFT-8或繁体UFT-8的转换代码
if($is_gb2312){ //简体UFT-8
$a=mb_convert_encoding($a,"gb2312","UTF-8");
$code = "gb2312";
}else{//繁体UFT-8
$a=mb_convert_encoding($a,"big5","UTF-8");
$code = "big5";
}
header("Content-Type: text/html; charset=$code");
echo $a;
?>

#4



if($is_gb2312){ //简体UFT-8
    $a=mb_convert_encoding($a,"gb2312","UTF-8");
    $code = "gb2312";
}else{//繁体UFT-8
    $a=mb_convert_encoding($a,"big5","UTF-8");
    $code = "big5";
}

以上代码只能当$a全是简体utf-8或者全是繁体utf-8的时候才可以用,取回来的数据是 "英格兰足球议会北部聯賽" 只有联赛2字是繁体,前面几只字是简体,所以无论如何用上面代码转都会出现部分字乱码。

#5


这样当然得用UTF-8编码输出,要不然网页都会有乱码的。

#6


$a="'鑻辨牸鍏拌冻鐞冭浼氬寳閮ㄨ伅璩?"; //'英格兰足球议会北部聯
echo iconv('utf-8', 'gbk', $a); //转码成 gbk
echo iconv('utf-8', 'gig5', $a); //转码成 big5

#7



header("Content-Type: text/html; charset=big5");
$a="'鑻辨牸鍏拌冻鐞冭浼氬寳閮ㄨ伅璩?";
$a=trim($a,"'");

echo iconv('utf-8', 'gbk', $a); //转码成 gbk
echo '<hr>';
echo iconv('utf-8', 'big5', $a); //转码成 big5


按楼上的还是乱码啊...

#8


那个 $a 的内容是 uft-8 编码的,只在 uft-8 环境中不乱码

转成 gbk 就要在 gbk 环境下观看
转成 big5 就要在 big5 环境下观看

环境不同,效果也不同

#9


我就是想在big5页面的环境下显示utf-8码,只能转换。如果utf-8码显示的是繁体字 用$a=mb_convert_encoding($a,"big5","UTF-8");是可以解决。但问题是 utf-8码显示的是繁体字和简体字混合。

$a=mb_convert_encoding($a,"big5","UTF-8");
$a=mb_convert_encoding($a,"gb2312","UTF-8");

都会有几个字是乱码。能不能做到每个字去判断是简体utf-8还是繁体utf-8(就是在utf-8环境下显示这个字会是简体字还是繁体字),如果能做了判断再单个字转就OK。

这网址真能整人,希望大虾们帮助。

#10


引用 4 楼 ewing333 的回复:
以上代码只能当$a全是简体utf-8或者全是繁体utf-8的时候才可以用,取回来的数据是 "英格兰足球议会北部聯賽" 只有联赛2字是繁体,前面几只字是简体,所以无论如何用上面代码转都会出现部分字乱码。

“简体/繁体”是“字符集(charset)”的问题,不要跟“编码方式(encoding)”搞混了。

你取回来的数据既然能够简繁体混排,基本上可以肯定是 UTF-8 编码方式,但是你必须先考虑进行“简/繁体转换”,统一到一个字符集,然后才能考虑转换成 GB2312 或者 BIG5 编码方式,因为这两种编码方式都无法同时支持“简体/繁体”字符集。

不过,“简/繁体转换”可不是一个简单的事情哦 @_@

#11


引用 9 楼 ewing333 的回复:
能不能做到每个字去判断是简体utf-8还是繁体utf-8(就是在utf-8环境下显示这个字会是简体字还是繁体字),如果能做了判断再单个字转就OK。

根据 UTF-8 的码值应该是能区分出简体还是繁体的,因为它们有不同的码段(虽然可能比较零碎麻烦)。

问题是,区分出来你也不能直接进行编码方式的转换,因为一个繁体字根本就没有对应的 GB2312 编码,反之亦然。

所以,真要完美解决的话,恐怕难逃“简/繁体转换”,但是这个确实不容易,比如“发”,你是转换成“發”还是转换成“髪”?这要看上下文的。

#1


为啥不用UTF-8啊,你这样维护很麻烦的。

而且没看明白你想做什么,header里面已经设置了utf-8输出,你后面为什么还要做转换?

#2


因为这是一个附加的功能,原系统已经做好了,用的是charset=big5。上面的数据是从网页上取回来的,那个网上就是用utf-8。

#3


那你的操作顺序错了,应该是这样:
<?php
//获取网页内容

//以下是如果字符串统一为简体UFT-8或繁体UFT-8的转换代码
if($is_gb2312){ //简体UFT-8
$a=mb_convert_encoding($a,"gb2312","UTF-8");
$code = "gb2312";
}else{//繁体UFT-8
$a=mb_convert_encoding($a,"big5","UTF-8");
$code = "big5";
}
header("Content-Type: text/html; charset=$code");
echo $a;
?>

#4



if($is_gb2312){ //简体UFT-8
    $a=mb_convert_encoding($a,"gb2312","UTF-8");
    $code = "gb2312";
}else{//繁体UFT-8
    $a=mb_convert_encoding($a,"big5","UTF-8");
    $code = "big5";
}

以上代码只能当$a全是简体utf-8或者全是繁体utf-8的时候才可以用,取回来的数据是 "英格兰足球议会北部聯賽" 只有联赛2字是繁体,前面几只字是简体,所以无论如何用上面代码转都会出现部分字乱码。

#5


这样当然得用UTF-8编码输出,要不然网页都会有乱码的。

#6


$a="'鑻辨牸鍏拌冻鐞冭浼氬寳閮ㄨ伅璩?"; //'英格兰足球议会北部聯
echo iconv('utf-8', 'gbk', $a); //转码成 gbk
echo iconv('utf-8', 'gig5', $a); //转码成 big5

#7



header("Content-Type: text/html; charset=big5");
$a="'鑻辨牸鍏拌冻鐞冭浼氬寳閮ㄨ伅璩?";
$a=trim($a,"'");

echo iconv('utf-8', 'gbk', $a); //转码成 gbk
echo '<hr>';
echo iconv('utf-8', 'big5', $a); //转码成 big5


按楼上的还是乱码啊...

#8


那个 $a 的内容是 uft-8 编码的,只在 uft-8 环境中不乱码

转成 gbk 就要在 gbk 环境下观看
转成 big5 就要在 big5 环境下观看

环境不同,效果也不同

#9


我就是想在big5页面的环境下显示utf-8码,只能转换。如果utf-8码显示的是繁体字 用$a=mb_convert_encoding($a,"big5","UTF-8");是可以解决。但问题是 utf-8码显示的是繁体字和简体字混合。

$a=mb_convert_encoding($a,"big5","UTF-8");
$a=mb_convert_encoding($a,"gb2312","UTF-8");

都会有几个字是乱码。能不能做到每个字去判断是简体utf-8还是繁体utf-8(就是在utf-8环境下显示这个字会是简体字还是繁体字),如果能做了判断再单个字转就OK。

这网址真能整人,希望大虾们帮助。

#10


引用 4 楼 ewing333 的回复:
以上代码只能当$a全是简体utf-8或者全是繁体utf-8的时候才可以用,取回来的数据是 "英格兰足球议会北部聯賽" 只有联赛2字是繁体,前面几只字是简体,所以无论如何用上面代码转都会出现部分字乱码。

“简体/繁体”是“字符集(charset)”的问题,不要跟“编码方式(encoding)”搞混了。

你取回来的数据既然能够简繁体混排,基本上可以肯定是 UTF-8 编码方式,但是你必须先考虑进行“简/繁体转换”,统一到一个字符集,然后才能考虑转换成 GB2312 或者 BIG5 编码方式,因为这两种编码方式都无法同时支持“简体/繁体”字符集。

不过,“简/繁体转换”可不是一个简单的事情哦 @_@

#11


引用 9 楼 ewing333 的回复:
能不能做到每个字去判断是简体utf-8还是繁体utf-8(就是在utf-8环境下显示这个字会是简体字还是繁体字),如果能做了判断再单个字转就OK。

根据 UTF-8 的码值应该是能区分出简体还是繁体的,因为它们有不同的码段(虽然可能比较零碎麻烦)。

问题是,区分出来你也不能直接进行编码方式的转换,因为一个繁体字根本就没有对应的 GB2312 编码,反之亦然。

所以,真要完美解决的话,恐怕难逃“简/繁体转换”,但是这个确实不容易,比如“发”,你是转换成“發”还是转换成“髪”?这要看上下文的。