PHP得到汉字的拼音字母

PHP得到汉字的拼音首字母

//得到汉字拼音首字母
function getfirstchar($s0){
    $fchar = ord($s0{0});
    if($fchar >= ord("A") and $fchar <= ord("z") )return strtoupper($s0{0});
    $s1 = mb_convert_encoding($s0,"gb2312");
    $s2 = mb_convert_encoding($s1, "UTF-8");
    if($s2 == $s0){$s = $s1;}else{$s = $s0;}
    $asc = ord($s{0}) * 256 + ord($s{1}) - 65536;
    if($asc >= -20319 and $asc <= -20284) return "A";
    if($asc >= -20283 and $asc <= -19776) return "B";
    if($asc >= -19775 and $asc <= -19219) return "C";
    if($asc >= -19218 and $asc <= -18711) return "D";
    if($asc >= -18710 and $asc <= -18527) return "E";
    if($asc >= -18526 and $asc <= -18240) return "F";
    if($asc >= -18239 and $asc <= -17923) return "G";
    if($asc >= -17922 and $asc <= -17418) return "H";
    if($asc >= -17922 and $asc <= -17418) return "I";
    if($asc >= -17417 and $asc <= -16475) return "J";
    if($asc >= -16474 and $asc <= -16213) return "K";
    if($asc >= -16212 and $asc <= -15641) return "L";
    if($asc >= -15640 and $asc <= -15166) return "M";
    if($asc >= -15165 and $asc <= -14923) return "N";
    if($asc >= -14922 and $asc <= -14915) return "O";
    if($asc >= -14914 and $asc <= -14631) return "P";
    if($asc >= -14630 and $asc <= -14150) return "Q";
    if($asc >= -14149 and $asc <= -14091) return "R";
    if($asc >= -14090 and $asc <= -13319) return "S";
    if($asc >= -13318 and $asc <= -12839) return "T";
    if($asc >= -12838 and $asc <= -12557) return "W";
    if($asc >= -12556 and $asc <= -11848) return "X";
    if($asc >= -11847 and $asc <= -11056) return "Y";
    if($asc >= -11055 and $asc <= -10247) return "Z";
    return NULL;
    //return $s0;
}

得到汉字串的拼音首字母

function pinyin_long($zh){  //获取整条字符串汉字拼音首字母
    $ret = "";
    $s1 = iconv("UTF-8","gb2312", $zh);
    $s2 = iconv("gb2312","UTF-8", $s1);
    if($s2 == $zh){$zh = $s1;}
    for($i = 0; $i < strlen($zh); $i++){
        $s1 = substr($zh,$i,1);
        $p = ord($s1);
        if($p > 160){
            $s2 = substr($zh,$i++,2);
            $ret .= getfirstchar($s2);
        }else{
            $ret .= $s1;
        }
    }
    return $ret;
}

得到汉字串的拼音全拼

class ChineseSpell {//注意仅支持:GBK,故传入参数前须转码
    /**
    * @var array $chineseSpellList 拼音编码对应表
    * @access private
    */
    private $chineseSpellList = array(
    'a'=>-20319,
    'ai'=>-20317,
    'an'=>-20304,
    'ang'=>-20295,
    'ao'=>-20292,
    'ba'=>-20283,
    'bai'=>-20265,
    'ban'=>-20257,
    'bang'=>-20242,
    'bao'=>-20230,
    'bei'=>-20051,
    'ben'=>-20036,
    'beng'=>-20032,
    'bi'=>-20026,
    'bian'=>-20002,
    'biao'=>-19990,
    'bie'=>-19986,
    'bin'=>-19982,
    'bing'=>-19976,
    'bo'=>-19805,
    'bu'=>-19784,
    'ca'=>-19775,
    'cai'=>-19774,
    'can'=>-19763,
    'cang'=>-19756,
    'cao'=>-19751,
    'ce'=>-19746,
    'ceng'=>-19741,
    'cha'=>-19739,
    'chai'=>-19728,
    'chan'=>-19725,
    'chang'=>-19715,
    'chao'=>-19540,
    'che'=>-19531,
    'chen'=>-19525,
    'cheng'=>-19515,
    'chi'=>-19500,
    'chong'=>-19484,
    'chou'=>-19479,
    'chu'=>-19467,
    'chuai'=>-19289,
    'chuan'=>-19288,
    'chuang'=>-19281,
    'chui'=>-19275,
    'chun'=>-19270,
    'chuo'=>-19263,
    'ci'=>-19261,
    'cong'=>-19249,
    'cou'=>-19243,
    'cu'=>-19242,
    'cuan'=>-19238,
    'cui'=>-19235,
    'cun'=>-19227,
    'cuo'=>-19224,
    'da'=>-19218,
    'dai'=>-19212,
    'dan'=>-19038,
    'dang'=>-19023,
    'dao'=>-19018,
    'de'=>-19006,
    'deng'=>-19003,
    'di'=>-18996,
    'dian'=>-18977,
    'diao'=>-18961,
    'die'=>-18952,
    'ding'=>-18783,
    'diu'=>-18774,
    'dong'=>-18773,
    'dou'=>-18763,
    'du'=>-18756,
    'duan'=>-18741,
    'dui'=>-18735,
    'dun'=>-18731,
    'duo'=>-18722,
    'e'=>-18710,
    'en'=>-18697,
    'er'=>-18696,
    'fa'=>-18526,
    'fan'=>-18518,
    'fang'=>-18501,
    'fei'=>-18490,
    'fen'=>-18478,
    'feng'=>-18463,
    'fo'=>-18448,
    'fou'=>-18447,
    'fu'=>-18446,
    'ga'=>-18239,
    'gai'=>-18237,
    'gan'=>-18231,
    'gang'=>-18220,
    'gao'=>-18211,
    'ge'=>-18201,
    'gei'=>-18184,
    'gen'=>-18183,
    'geng'=>-18181,
    'gong'=>-18012,
    'gou'=>-17997,
    'gu'=>-17988,
    'gua'=>-17970,
    'guai'=>-17964,
    'guan'=>-17961,
    'guang'=>-17950,
    'gui'=>-17947,
    'gun'=>-17931,
    'guo'=>-17928,
    'ha'=>-17922,
    'hai'=>-17759,
    'han'=>-17752,
    'hang'=>-17733,
    'hao'=>-17730,
    'he'=>-17721,
    'hei'=>-17703,
    'hen'=>-17701,
    'heng'=>-17697,
    'hong'=>-17692,
    'hou'=>-17683,
    'hu'=>-17676,
    'hua'=>-17496,
    'huai'=>-17487,
    'huan'=>-17482,
    'huang'=>-17468,
    'hui'=>-17454,
    'hun'=>-17433,
    'huo'=>-17427,
    'ji'=>-17417,
    'jia'=>-17202,
    'jian'=>-17185,
    'jiang'=>-16983,
    'jiao'=>-16970,
    'jie'=>-16942,
    'jin'=>-16915,
    'jing'=>-16733,
    'jiong'=>-16708,
    'jiu'=>-16706,
    'ju'=>-16689,
    'juan'=>-16664,
    'jue'=>-16657,
    'jun'=>-16647,
    'ka'=>-16474,
    'kai'=>-16470,
    'kan'=>-16465,
    'kang'=>-16459,
    'kao'=>-16452,
    'ke'=>-16448,
    'ken'=>-16433,
    'keng'=>-16429,
    'kong'=>-16427,
    'kou'=>-16423,
    'ku'=>-16419,
    'kua'=>-16412,
    'kuai'=>-16407,
    'kuan'=>-16403,
    'kuang'=>-16401,
    'kui'=>-16393,
    'kun'=>-16220,
    'kuo'=>-16216,
    'la'=>-16212,
    'lai'=>-16205,
    'lan'=>-16202,
    'lang'=>-16187,
    'lao'=>-16180,
    'le'=>-16171,
    'lei'=>-16169,
    'leng'=>-16158,
    'li'=>-16155,
    'lia'=>-15959,
    'lian'=>-15958,
    'liang'=>-15944,
    'liao'=>-15933,
    'lie'=>-15920,
    'lin'=>-15915,
    'ling'=>-15903,
    'liu'=>-15889,
    'long'=>-15878,
    'lou'=>-15707,
    'lu'=>-15701,
    'lv'=>-15681,
    'luan'=>-15667,
    'lue'=>-15661,
    'lun'=>-15659,
    'luo'=>-15652,
    'ma'=>-15640,
    'mai'=>-15631,
    'man'=>-15625,
    'mang'=>-15454,
    'mao'=>-15448,
    'me'=>-15436,
    'mei'=>-15435,
    'men'=>-15419,
    'meng'=>-15416,
    'mi'=>-15408,
    'mian'=>-15394,
    'miao'=>-15385,
    'mie'=>-15377,
    'min'=>-15375,
    'ming'=>-15369,
    'miu'=>-15363,
    'mo'=>-15362,
    'mou'=>-15183,
    'mu'=>-15180,
    'na'=>-15165,
    'nai'=>-15158,
    'nan'=>-15153,
    'nang'=>-15150,
    'nao'=>-15149,
    'ne'=>-15144,
    'nei'=>-15143,
    'nen'=>-15141,
    'neng'=>-15140,
    'ni'=>-15139,
    'nian'=>-15128,
    'niang'=>-15121,
    'niao'=>-15119,
    'nie'=>-15117,
    'nin'=>-15110,
    'ning'=>-15109,
    'niu'=>-14941,
    'nong'=>-14937,
    'nu'=>-14933,
    'nv'=>-14930,
    'nuan'=>-14929,
    'nue'=>-14928,
    'nuo'=>-14926,
    'o'=>-14922,
    'ou'=>-14921,
    'pa'=>-14914,
    'pai'=>-14908,
    'pan'=>-14902,
    'pang'=>-14894,
    'pao'=>-14889,
    'pei'=>-14882,
    'pen'=>-14873,
    'peng'=>-14871,
    'pi'=>-14857,
    'pian'=>-14678,
    'piao'=>-14674,
    'pie'=>-14670,
    'pin'=>-14668,
    'ping'=>-14663,
    'po'=>-14654,
    'pu'=>-14645,
    'qi'=>-14630,
    'qia'=>-14594,
    'qian'=>-14429,
    'qiang'=>-14407,
    'qiao'=>-14399,
    'qie'=>-14384,
    'qin'=>-14379,
    'qing'=>-14368,
    'qiong'=>-14355,
    'qiu'=>-14353,
    'qu'=>-14345,
    'quan'=>-14170,
    'que'=>-14159,
    'qun'=>-14151,
    'ran'=>-14149,
    'rang'=>-14145,
    'rao'=>-14140,
    're'=>-14137,
    'ren'=>-14135,
    'reng'=>-14125,
    'ri'=>-14123,
    'rong'=>-14122,
    'rou'=>-14112,
    'ru'=>-14109,
    'ruan'=>-14099,
    'rui'=>-14097,
    'run'=>-14094,
    'ruo'=>-14092,
    'sa'=>-14090,
    'sai'=>-14087,
    'san'=>-14083,
    'sang'=>-13917,
    'sao'=>-13914,
    'se'=>-13910,
    'sen'=>-13907,
    'seng'=>-13906,
    'sha'=>-13905,
    'shai'=>-13896,
    'shan'=>-13894,
    'shang'=>-13878,
    'shao'=>-13870,
    'she'=>-13859,
    'shen'=>-13847,
    'sheng'=>-13831,
    'shi'=>-13658,
    'shou'=>-13611,
    'shu'=>-13601,
    'shua'=>-13406,
    'shuai'=>-13404,
    'shuan'=>-13400,
    'shuang'=>-13398,
    'shui'=>-13395,
    'shun'=>-13391,
    'shuo'=>-13387,
    'si'=>-13383,
    'song'=>-13367,
    'sou'=>-13359,
    'su'=>-13356,
    'suan'=>-13343,
    'sui'=>-13340,
    'sun'=>-13329,
    'suo'=>-13326,
    'ta'=>-13318,
    'tai'=>-13147,
    'tan'=>-13138,
    'tang'=>-13120,
    'tao'=>-13107,
    'te'=>-13096,
    'teng'=>-13095,
    'ti'=>-13091,
    'tian'=>-13076,
    'tiao'=>-13068,
    'tie'=>-13063,
    'ting'=>-13060,
    'tong'=>-12888,
    'tou'=>-12875,
    'tu'=>-12871,
    'tuan'=>-12860,
    'tui'=>-12858,
    'tun'=>-12852,
    'tuo'=>-12849,
    'wa'=>-12838,
    'wai'=>-12831,
    'wan'=>-12829,
    'wang'=>-12812,
    'wei'=>-12802,
    'wen'=>-12607,
    'weng'=>-12597,
    'wo'=>-12594,
    'wu'=>-12585,
    'xi'=>-12556,
    'xia'=>-12359,
    'xian'=>-12346,
    'xiang'=>-12320,
    'xiao'=>-12300,
    'xie'=>-12120,
    'xin'=>-12099,
    'xing'=>-12089,
    'xiong'=>-12074,
    'xiu'=>-12067,
    'xu'=>-12058,
    'xuan'=>-12039,
    'xue'=>-11867,
    'xun'=>-11861,
    'ya'=>-11847,
    'yan'=>-11831,
    'yang'=>-11798,
    'yao'=>-11781,
    'ye'=>-11604,
    'yi'=>-11589,
    'yin'=>-11536,
    'ying'=>-11358,
    'yo'=>-11340,
    'yong'=>-11339,
    'you'=>-11324,
    'yu'=>-11303,
    'yuan'=>-11097,
    'yue'=>-11077,
    'yun'=>-11067,
    'za'=>-11055,
    'zai'=>-11052,
    'zan'=>-11045,
    'zang'=>-11041,
    'zao'=>-11038,
    'ze'=>-11024,
    'zei'=>-11020,
    'zen'=>-11019,
    'zeng'=>-11018,
    'zha'=>-11014,
    'zhai'=>-10838,
    'zhan'=>-10832,
    'zhang'=>-10815,
    'zhao'=>-10800,
    'zhe'=>-10790,
    'zhen'=>-10780,
    'zheng'=>-10764,
    'zhi'=>-10587,
    'zhong'=>-10544,
    'zhou'=>-10533,
    'zhu'=>-10519,
    'zhua'=>-10331,
    'zhuai'=>-10329,
    'zhuan'=>-10328,
    'zhuang'=>-10322,
    'zhui'=>-10315,
    'zhun'=>-10309,
    'zhuo'=>-10307,
    'zi'=>-10296,
    'zong'=>-10281,
    'zou'=>-10274,
    'zu'=>-10270,
    'zuan'=>-10262,
    'zui'=>-10260,
    'zun'=>-10256,
    'zuo'=>-10254
    );
                       
    /**
    * 取汉字所有拼音
    * @param string $chinese 要转换的汉字
    * @param string $delimiter 分隔符
    * @param int $length 返回的长度
    * @return string
    */
    public function getFullSpell($chinese, $delimiter = '', $length = 0){
        $spell = $this->getChineseSpells($chinese, $delimiter);
        if($length){
            $spell = substr($spell, 0, $length);
        }
        return $spell;
    }
       
    /**
    * 取汉字第【一个】汉字完整拼音
    * @param string $chinese 要转换的汉字
    * @param int $length 返回的长度
    * @return string
    */
    public function getFirstSpell($chinese, $length = 0){
        $spell = $this->getChineseSpells($chinese, ' ', 1);
        if($length){
            $spell = substr($spell, 0, $length);
        }
        return $spell;
    }
       
    /**
    * 取一个汉字码对应的拼音
    * @param int $num 汉字码
    * @param string $blank 空白字符
    * @return string
    */
    public function getChineseSpell ($num, $blank = ''){
        if($num>0 && $num<160){
            return chr($num);
        }
        elseif($num<-20319||$num>-10247){
            return $blank;
        }
        else{
            foreach ($this->chineseSpellList as $spell => $code){
                if ($code > $num) break;
                $result = $spell;
            }
            return $result;
        }
    }
       
    /**
    * 取汉字拼音
    * @param string $chinese 要转换的汉字
    * @param string $delimiter 分隔符
    * @param int $first 是否只返回第一个
    * @return string
    */
    public function getChineseSpells($chinese, $delimiter = '', $first=0){
        $chinese = mb_convert_encoding($chinese, "GBK");
        $result = array();
        for($i=0; $i160){
                $q = ord(substr($chinese,++$i,1));
                $p = $p*256 + $q - 65536;
            }
            $result[] = $this->getChineseSpell($p);
            if($first){
                return $result[0];
            }
        }
        return implode($delimiter, $result);
    }
}

 

你可能感兴趣的:(PHP)