本帖最后由 liuzhly 于 2009-12-20 19:40 编辑
查了一下午,终于找到原因,原来是农场编码问题,如有相同情况,请使用如下解决办法:
测试方法,修改自己的名字为:“ˇ輫ㄊ徊ヘ”然后进入农场试试...
方法1或者2任选一种即可解决~~如果自己名字是GB2312或者英文,出现无限初始化,那么不是编码的缘故~~
1、修改自己的名字为GB2312或者英文
2、替换3个函数即可解决:
function unicode_encode($str){
$str = iconv('UTF-8', 'UCS-2BE//IGNORE', $str);
$len = strlen($str);
$newstr = '';
for($i = 0; $i < $len - 1; $i = $i + 2){
$c = $str[$i];
$c2 = $str[$i+1];
if (ord($c) > 0){
//tow byte
$s = base_convert(ord($c), 10, 16);
if(hexdec($s) > 0xF){
$newstr .='\\u'.$s;
}else{
$newstr .='\\u'.'0'.$s;
}
$s = base_convert(ord($c2), 10, 16);
if(hexdec($s) > 0xF){
$newstr .=$s;
}else{
$newstr .='0'.$s;
}
}elseif(ord($c2)<127){
$newstr .= $c2;
}
}
return $newstr;
}
function unicode_encodegb($str){
$str = iconv('GBK', 'UCS-2BE//IGNORE', $str);
$len = strlen($str);
$newstr = '';
for($i = 0; $i < $len - 1; $i = $i + 2){
$c = $str[$i];
$c2 = $str[$i+1];
if (ord($c) > 0){
$s = base_convert(ord($c), 10, 16);
if(hexdec($s) > 0xF){
$newstr .='\\u'.$s;
}else{
$newstr .='\\u'.'0'.$s;
}
$s = base_convert(ord($c2), 10, 16);
if(hexdec($s) > 0xF){
$newstr .=$s;
}else{
$newstr .='0'.$s;
}
}elseif(ord($c2)<127){
$newstr .= $c2;
}
}
return $newstr;
}
function unicode_encodebig5($str){
$str =iconv('big5', 'UCS-2BE//IGNORE', $str);
$len = strlen($str);
$newstr = '';
for($i = 0; $i < $len - 1; $i = $i + 2){
$c = $str[$i];
$c2 = $str[$i+1];
if (ord($c) > 0){
//tow byte
$s = base_convert(ord($c), 10, 16);
if(hexdec($s) > 0xF){
$newstr .='\\u'.$s;
}else{
$newstr .='\\u'.'0'.$s;
}
$s = base_convert(ord($c2), 10, 16);
if(hexdec($s) > 0xF){
$newstr .=$s;
}else{
$newstr .='0'.$s;
}
}elseif(ord($c2)<127){
$newstr .= $c2;
}
}
return $newstr;
} |