1. /**
    2. * utf8转gbk
    3. * @param $utfstr
    4. */
    5. function utf8_to_gbk($utfstr) {
    6. global $UC2GBTABLE;
    7. $okstr = '';
    8. if(empty($UC2GBTABLE)) {
    9. $filename = CODETABLEDIR.'gb-unicode.table';
    10. $fp = fopen($filename, 'rb');
    11. while($l = fgets($fp,15)) {
    12. $UC2GBTABLE[hexdec(substr($l, 7, 6))] = hexdec(substr($l, 0, 6));
    13. }
    14. fclose($fp);
    15. }
    16. $okstr = '';
    17. $ulen = strlen($utfstr);
    18. for($i=0; $i<$ulen; $i++) {
    19. $c = $utfstr[$i];
    20. $cb = decbin(ord($utfstr[$i]));
    21. if(strlen($cb)==8) {
    22. $csize = strpos(decbin(ord($cb)),'0');
    23. for($j = 0; $j < $csize; $j++) {
    24. $i++;
    25. $c .= $utfstr[$i];
    26. }
    27. $c = utf8_to_unicode($c);
    28. if(isset($UC2GBTABLE[$c])) {
    29. $c = dechex($UC2GBTABLE[$c]+0x8080);
    30. $okstr .= chr(hexdec($c[0].$c[1])).chr(hexdec($c[2].$c[3]));
    31. } else {
    32. $okstr .= '&#'.$c.';';
    33. }
    34. } else {
    35. $okstr .= $c;
    36. }
    37. }
    38. $okstr = trim($okstr);
    39. return $okstr;
    40. }