获取首字符的拼音首字母
获取首字符的拼音首字母
获取首字符的拼音首字母
/*
在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正则匹配反斜杠'\'和美元'$'
精彩图集
精彩文章






