php有一个函数:mb_detect_encoding。
不过这个东西需要有mb_string库,不是到处都能用的。
function is_utf8($string) {return preg_match('%^(?:[\x09\x0a\x0d\x20-\x7e] # ascii| [\xc2-\xdf][\x80-\xbf] # non-overlong 2-byte| \xe0[\xa0-\xbf][\x80-\xbf] # excluding overlongs| [\xe1-\xec\xee\xef][\x80-\xbf]{2} # straight 3-byte| \xed[\x80-\x9f][\x80-\xbf] # excluding surrogates| \xf0[\x90-\xbf][\x80-\xbf]{2} # planes 1-3| [\xf1-\xf3][\x80-\xbf]{3} # planes 4-15| \xf4[\x80-\x8f][\x80-\xbf]{2} # plane 16)*$%xs', $string); }
准确率基本和mb_detect_encoding一样,要对一起对,要错一起错。
编码检测不可能100%准确,这个东西已经可以基本满足要求了。
