127) { if( ($v >= 228) && ($v <= 233) ){ if( ($i+2) >= (strlen($str) - 1)) return true; // not enough characters $v1 = ord( $str[$i+1] ); $v2 = ord( $str[$i+2] ); if( ($v1 >= 128) && ($v1 <=191) && ($v2 >=128) && ($v2 <= 191) ) return false; else return true; //GB编码 } } } } private function is_GBK($str){ $s1 = iconv('gbk','utf-8',$str); $s0 = iconv('utf-8','gbk',$s1); if($s0 == $str){ return true; }else{ return false; } } /** * 取得编码 * @param string $str * @return string $encoding */ public static function get_encoding($str){ $ary = array(); //$ary[] = "ASCII"; $ary[] = "UTF-8"; $ary[] = "GB18030";//简体码 $ary[] = "BIG-5";//繁体码 $ary[] = "EUC-CN"; $ary[] = "JIS";//日文编码 $ary[] = "EUC-JP";//日文编码 $encoding= self::detect_utf_encoding($str); //if(empty($encoding) && self::is_GBK($str)) return 'GBK'; if(empty($encoding)){ $encoding=mb_detect_encoding($str,$ary); } if($encoding=='ASCII') $encoding='UTF-8'; return $encoding; } public function utf16_to_utf8($str) { $len = strlen($str); $dec = ''; for ($i = 0; $i < $len; $i += 2) { $c = ($be) ? ord($str[$i]) << 8 | ord($str[$i + 1]) : ord($str[$i + 1]) << 8 | ord($str[$i]); if ($c >= 0x0001 && $c <= 0x007F) { $dec .= chr($c); } else if ($c > 0x07FF) { $dec .= chr(0xE0 | (($c >> 12) & 0x0F)); $dec .= chr(0x80 | (($c >> 6) & 0x3F)); $dec .= chr(0x80 | (($c >> 0) & 0x3F)); } else { $dec .= chr(0xC0 | (($c >> 6) & 0x1F)); $dec .= chr(0x80 | (($c >> 0) & 0x3F)); } } return $dec; } } ?>