1) return ($h & 0x1F) << 6 | (ord($ch[1]) & 0x3F); if ($h <= 0xEF && $len > 2) return ($h & 0x0F) << 12 | (ord($ch[1]) & 0x3F) << 6 | (ord($ch[2]) & 0x3F); if ($h <= 0xF4 && $len > 3) return ($h & 0x0F) << 18 | (ord($ch[1]) & 0x3F) << 12 | (ord($ch[2]) & 0x3F) << 6 | (ord($ch[3]) & 0x3F); return -2; } /** * @param string $str * @param integer $num * * @return string */ public static function utf8_charAt($str, $num) { return mb_substr($str, $num, 1, 'UTF-8'); } /** * @param string $str * @return integer */ public static function utf8_strlen($str) { return mb_strlen($str, 'UTF-8'); } }