获取首字符的拼音首字母
获取首字符的拼音首字母
获取首字符的拼音首字母
/* 在GB字符集中,按拼音排序的只有 B0A0 - D7FF 共 40 区, 以下是拼字 A-Z 起始的字符位置表 0xB0A1, 0xB0C5, 0xB2C1, 0xB4EE, 0xB6EA, 0xB7A2, 0xB8C1, // A-G * 0xB9FE, 0, 0xBBF7, 0xBFA6, 0xC0AC, 0xC2E8, 0xC4C3, // H-N MISS I * 0xC5B6, 0xC5BE, 0xC6DA, 0xC8BB, 0xC8F6, 0xCBFA, 0, // O-T MISS U * 0, 0xCDDA, 0xCEF4, 0xD1B9, 0xD4D1, // W-Z MISS V * */ /** * 返回首字的拼音首字母(大写),如果获取失败,则返回空字符串 * @param string $input_string * @param string $input_charset * @return string */ function getFirstPinyinChar($input_string, $input_charset = 'UTF-8') { if (empty($input_string)) { return ''; } $first_byte = ord($input_string{0}); if ($first_byte >= 0x41 && $first_byte <= 0x5A) { return $input_string{0}; // 大写字母,直接返回 } else if ($first_byte >= 0x61 && $first_byte <= 0x7A) { return chr($first_byte - 32); // 小写字母,返回大写形式 } else if ($first_byte > 0x7F) { // 多字节字符,进行以下操作 $input_charset = strtoupper($input_charset); if ($input_charset == 'GB2312' || $input_charset == 'GBK' || $input_charset == 'GB18030' || $input_charset == 'GB12345' ) { } else { // 非 GB 家庭的字符集,则转成 GBK 以便取拼音 $input_string = iconv($input_charset, 'GB2312', $input_string); $first_byte = ord($input_string{0}); // 重新计算首字节的值 } if ($first_byte < 0xB0 || $first_byte > 0xD7) { return ''; // 不在拼音检索区 } $char_code = ($first_byte << 8) + ord($input_string{1}); if ($char_code < 0xB0C5) { return "A"; } else if ($char_code < 0xB2C1) { return "B"; } else if ($char_code < 0xB4EE) { return "C"; } else if ($char_code < 0xB6EA) { return "D"; } else if ($char_code < 0xB7A2) { return "E"; } else if ($char_code < 0xB8C1) { return "F"; } else if ($char_code < 0xB9FE) { return "G"; } else if ($char_code < 0xBBF7) { return "H"; } else if ($char_code < 0xBFA6) { return "J"; } else if ($char_code < 0xC0AC) { return "K"; } else if ($char_code < 0xC2E8) { return "L"; } else if ($char_code < 0xC4C3) { return "M"; } else if ($char_code < 0xC5B6) { return "N"; } else if ($char_code < 0xC5BE) { return "O"; } else if ($char_code < 0xC6DA) { return "P"; } else if ($char_code < 0xC8BB) { return "Q"; } else if ($char_code < 0xC8F6) { return "R"; } else if ($char_code < 0xCBFA) { return "S"; } else if ($char_code < 0xCDDA) { return "T"; } else if ($char_code < 0xCEF4) { return "W"; } else if ($char_code < 0xD1B9) { return "X"; } else if ($char_code < 0xD4D1) { return "Y"; } else { return "Z"; } } return ''; }
- 上一篇:peizhi
- 下一篇:PHP正则匹配反斜杠'\'和美元'$'
精彩图集
精彩文章