第一种方法: 

function is_gb2312($str)
{
        for($i=0; $i<strlen($str); $i++) {
                $v = ord( $str[$i] );
                if( $v > 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) ) // utf编码
                                        return false;
                                else
                                        return true;
                        }
                }
        }
        return true;
}

 

第二种方法:

/**
 * 判断字符串是utf-8 还是gb2312
 * @param unknown $str
 * @param string $default
 * @return string
 */
public static function utf8_gb2312($str, $default = \'gb2312\')
{
	$str = preg_replace(\"/[\\x01-\\x7F]+/\", \"\", $str);
	if (empty($str)) return $default;

	$preg =  array(
		\"gb2312\" => \"/^([\\xA1-\\xF7][\\xA0-\\xFE])+$/\", //正则判断是否是gb2312
		\"utf-8\" => \"/^[\\x{4E00}-\\x{9FA5}]+$/u\",      //正则判断是否是汉字(utf8编码的条件了),这个范围实际上已经包含了繁体中文字了
	);

	if ($default == \'gb2312\') {
		$option = \'utf-8\';
	} else {
		$option = \'gb2312\';
	}

	if (!preg_match($preg[$default], $str)) {
		return $option;
	}
	$str = @iconv($default, $option, $str);

	//不能转成 $option, 说明原来的不是 $default
	if (empty($str)) {
		return $option;
	}
	return $default;
}

 

收藏 打印