//gb2312编码转utf8编码 |
function gb2utf8( $gb ) /* Program writen by sadly modified by agun */ { |
if (!trim( $gb )) |
return $gb ; |
$filename = "gb2312.txt" ; |
$tmp = file( $filename ); |
$codetable = array (); |
while (list( $key , $value ) = each( $tmp )) |
$codetable [hexdec( substr ( $value , 0, 6))] = substr ( $value , 7, 6); |
|
$ret = "" ; |
$utf8 = "" ; |
while ( $gb ) { |
if (ord( substr ( $gb , 0, 1)) > 127) { |
$this = substr ( $gb , 0, 2); |
$gb = substr ( $gb , 2, strlen ( $gb )); |
$utf8 = u2utf8(hexdec( $codetable [hexdec(bin2hex( $this )) - 0x8080])); |
for ( $i = 0; $i < strlen ( $utf8 ); $i += 3) |
$ret . = chr ( substr ( $utf8 , $i , 3)); |
} else { |
$ret . = substr ( $gb , 0, 1); |
$gb = substr ( $gb , 1, strlen ( $gb )); |
} |
} |
return $ret ; |
} |
//unicode编码转utf8编码 |
function u2utf8( $c ) { |
for ( $i = 0; $i < count ( $c ); $i ++) |
$str = "" ; |
if ( $c < 0x80) { |
$str . = $c ; |
} else if ( $c < 0x800) { |
$str . = (0xC0 | $c >> 6); |
$str . = (0x80 | $c & 0x3F); |
} else if ( $c < 0x10000) { |
$str . = (0xE0 | $c >> 12); |
$str . = (0x80 | $c >> 6 & 0x3F); |
$str . = (0x80 | $c & 0x3F); |
} else if ( $c < 0x200000) { |
$str . = (0xF0 | $c >> 18); |
$str . = (0x80 | $c >> 12 & 0x3F); |
$str . = (0x80 | $c >> 6 & 0x3F); |
$str . = (0x80 | $c & 0x3F); |
} |
return $str ; |
} |