1. /**
    2. * gbk转utf8
    3. * @param $gbstr
    4. */
    5. function gbk_to_utf8($gbstr) {
    6. global $CODETABLE;
    7. if(empty($CODETABLE)) {
    8. $filename = CODETABLEDIR.'gb-unicode.table';
    9. $fp = fopen($filename, 'rb');
    10. while($l = fgets($fp,15)) {
    11. $CODETABLE[hexdec(substr($l, 0, 6))] = substr($l, 7, 6);
    12. }
    13. fclose($fp);
    14. }
    15. $ret = '';
    16. $utf8 = '';
    17. while($gbstr) {
    18. if(ord(substr($gbstr, 0, 1)) > 0x80) {
    19. $thisW = substr($gbstr, 0, 2);
    20. $gbstr = substr($gbstr, 2, strlen($gbstr));
    21. $utf8 = '';
    22. @$utf8 = unicode_to_utf8(hexdec($CODETABLE[hexdec(bin2hex($thisW)) - 0x8080]));
    23. if($utf8 != '') {
    24. for($i = 0; $i < strlen($utf8); $i += 3) $ret .= chr(substr($utf8, $i, 3));
    25. }
    26. } else {
    27. $ret .= substr($gbstr, 0, 1);
    28. $gbstr = substr($gbstr, 1, strlen($gbstr));
    29. }
    30. }
    31. return $ret;
    32. }