public function pingyinFirstChar($sourcestr)
{
$returnstr = '';
$i = 0;
$n = 0;
$str_length = strlen($sourcestr);//字符串的字节数
while ($i <= $str_length) {
$temp_str = substr($sourcestr, $i, 1);
$ascnum = Ord($temp_str);//得到字符串中第$i位字符的ascii码
if ($ascnum >= 224) { //如果ASCII位高与224,
$returnstr = $returnstr . $this->getHanziInitial(substr($sourcestr, $i, 3)); //根据UTF-8编码规范,将3个连续的字符计为单个字符
$i = $i + 3;//实际Byte计为3
} else if ($ascnum >= 192) { //如果ASCII位高与192,
$returnstr = $returnstr . $this->getHanziInitial(substr($sourcestr, $i, 2)); //根据UTF-8编码规范,将2个连续的字符计为单个字符
$i = $i + 2;//实际Byte计为2
} else if ($ascnum >= 65 && $ascnum <= 90) { //如果是大写字母,
$returnstr = $returnstr . substr($sourcestr, $i, 1);
$i = $i + 1;//实际的Byte数仍计1个
} else { //其他情况下,包括小写字母和半角标点符号,
$returnstr = $returnstr . strtoupper(substr($sourcestr, $i, 1)); //小写字母转换为大写
$i = $i + 1;//实际的Byte数计1个
}
}
return $returnstr;
}
public function getHanziInitial($s0)
{
if (ord($s0) >= "1" and ord($s0) <= ord("z")) {
return strtoupper($s0);
}
$s = iconv("UTF-8", "gb2312//IGNORE", $s0); // 不要转换成GB2312内没有的字符哦,^_^
// var_dump($s);exit;
$asc = @ord($s[0]) * 256 + @ord($s[1]) - 65536;
if ($asc >= -20319 and $asc <= -20284) return "A";
if (in_array($asc, [])) return "A";
if ($asc >= -20283 and $asc <= -19776) return "B";
if (in_array($asc, [-8791, -5941])) return "B";
if ($asc >= -19775 and $asc <= -19219) return "C";
if (in_array($asc, [-4916])) return "C";
if ($asc >= -19218 and $asc <= -18711) return "D";
if (in_array($asc, [])) return "D";
if ($asc >= -18710 and $asc <= -18527) return "E";
if (in_array($asc, [])) return "E";
if ($asc >= -18526 and $asc <= -18240) return "F";
if (in_array($asc, [-6662])) return "F";
if ($asc >= -18239 and $asc <= -17923) return "G";
if (in_array($asc, [-8721, -2824, -5681])) return "G";
if ($asc >= -17922 and $asc <= -17418) return "H";
if (in_array($asc, [-8721])) return "H";
if ($asc >= -17417 and $asc <= -16475) return "J";
if (in_array($asc, [-5671, -8795, -65536, -8966, -8772, -6712])) return "J";
if ($asc >= -16474 and $asc <= -16213) return "K";
if (in_array($asc, [])) return "K";
if ($asc >= -16212 and $asc <= -15641) return "L";
if (in_array($asc, [-2069, -5715])) return "L";
if ($asc >= -15640 and $asc <= -15166) return "M";
if (in_array($asc, [-8786, -7512])) return "M";
if ($asc >= -15165 and $asc <= -14923) return "N";
if (in_array($asc, [])) return "N";
if ($asc >= -14922 and $asc <= -14915) return "O";
if (in_array($asc, [])) return "O";
if ($asc >= -14914 and $asc <= -14631) return "P";
if (in_array($asc, [-8718, -5951])) return "P";
if ($asc >= -14630 and $asc <= -14150) return "Q";
if (in_array($asc, [-2072, -8967])) return "Q";
if ($asc >= -14149 and $asc <= -14091) return "R";
if (in_array($asc, [])) return "R";
if ($asc >= -14090 and $asc <= -13319) return "S";
if (in_array($asc, [-8744, -8795])) return "S";
if ($asc >= -13318 and $asc <= -12839) return "T";
if (in_array($asc, [-8979])) return "T";
if ($asc >= -12838 and $asc <= -12557) return "W";
if (in_array($asc, [-8789])) return "W";
if (in_array($asc, [-4869, -9016, -8529])) return "X";
if ($asc >= -12556 and $asc <= -11848) return "X";
if ($asc >= -11847 and $asc <= -11056) return "Y";
if (in_array($asc, [-5930, -5159])) return "Y";
if ($asc >= -11055 and $asc <= -10247) return "Z";
if (in_array($asc, [-5717])) return "Z";
return 'a'; //$s0 是 返回原字符,不作转换。(标点、空格、繁体字都会直接返回)
}