您的位置:首页 > 编程语言 > PHP开发

php将汉字转换为拼音

2018-01-31 18:37 786 查看
在php开发中,经常会遇到根据汉字的首字母拼音排序的问题,该如何解决呢!利用我们php强大的类.

1.引入汉字转换成拼音类Pinyin.class.php

<?php

/**

 * 汉字转化为拼音类

 */

class Pinyin {

    /**

     * 汉字ASCII码库

     * @var array

     */

    protected $lib;

    /**

     * 构造函数

     * @return void

     */

    public function __construct() {

        

    }

    /**

     * 汉字转化并输出拼音

     * @param string $str
所要转化拼音的汉字

     * @param boolean $utf8 
汉字编码是否为utf8

     * @return string

     */

    public function output($str, $utf8 = true) {

        //参数分析

        if (!$str) {

            return false;

        }

        //编码转换.

        $str = ($utf8 == true) ? $this->iconvStr('utf-8', 'gbk', $str) : $str;

        $num = strlen($str);

        $pinyin = '';

        for ($i = 0; $i < $num; $i++) {

            $temp = ord(substr($str, $i, 1));

            if ($temp > 160) {

                $temp2 = ord(substr($str, ++$i, 1));

                $temp = $temp * 256 + $temp2 - 65536;

            }

            $pinyin .= $this->num2str($temp);

        }

        //输出的拼音编码转换.

        return ($utf8 == true) ? $this->iconvStr('gbk', 'utf-8', $pinyin) : $pinyin;

    }

    /**

     * 将ASCII编码转化为字符串.

     * @param integer $num

     * @return string

     */

    protected function num2str($num) {

        if (!$this->lib) {

            $this->parse_lib();

        }

        if ($num > 0 && $num < 160) {

            return chr($num);

        } elseif ($num < -20319 || $num > -10247) {

            return '';

        } else {

            $total = sizeof($this->lib) - 1;

            for ($i = $total; $i >= 0; $i--) {

                if ($this->lib[$i][1] <= $num) {

                    break;

                }

            }

            return $this->lib[$i][0];

        }

    }

    /**

     * 返回汉字编码库

     * @return array

     */

    protected function parse_lib() {

        return $this->lib = array(

            array("a", -20319),

            array("ai", -20317),

            array("an", -20304),

            array("ang", -20295),

            array("ao",
4000
-20292),

            array("ba", -20283),

            array("bai", -20265),

            array("ban", -20257),

            array("bang", -20242),

            array("bao", -20230),

            array("bei", -20051),

            array("ben", -20036),

            array("beng", -20032),

            array("bi", -20026),

            array("bian", -20002),

            array("biao", -19990),

            array("bie", -19986),

            array("bin", -19982),

            array("bing", -19976),

            array("bo", -19805),

            array("bu", -19784),

            array("ca", -19775),

            array("cai", -19774),

            array("can", -19763),

            array("cang", -19756),

            array("cao", -19751),

            array("ce", -19746),

            array("ceng", -19741),

            array("cha", -19739),

            array("chai", -19728),

            array("chan", -19725),

            array("chang", -19715),

            array("chao", -19540),

            array("che", -19531),

            array("chen", -19525),

            array("cheng", -19515),

            array("chi", -19500),

            array("chong", -19484),

            array("chou", -19479),

            array("chu", -19467),

            array("chuai", -19289),

            array("chuan", -19288),

            array("chuang", -19281),

            array("chui", -19275),

            array("chun", -19270),

            array("chuo", -19263),

            array("ci", -19261),

            array("cong", -19249),

            array("cou", -19243),

            array("cu", -19242),

            array("cuan", -19238),

            array("cui", -19235),

            array("cun", -19227),

            array("cuo", -19224),

            array("da", -19218),

            array("dai", -19212),

            array("dan", -19038),

            array("dang", -19023),

            array("dao", -19018),

            array("de", -19006),

            array("deng", -19003),

            array("di", -18996),

            array("dian", -18977),

            array("diao", -18961),

            array("die", -18952),

            array("ding", -18783),

            array("diu", -18774),

            array("dong", -18773),

            array("dou", -18763),

            array("du", -18756),

            array("duan", -18741),

            array("dui", -18735),

            array("dun", -18731),

            array("duo", -18722),

            array("e", -18710),

            array("en", -18697),

            array("er", -18696),

            array("fa", -18526),

            array("fan", -18518),

            array("fang", -18501),

            array("fei", -18490),

            array("fen", -18478),

            array("feng", -18463),

            array("fo", -18448),

            array("fou", -18447),

            array("fu", -18446),

            array("ga", -18239),

            array("gai", -18237),

            array("gan", -18231),

            array("gang", -18220),

            array("gao", -18211),

            array("ge", -18201),

            array("gei", -18184),

            array("gen", -18183),

            array("geng", -18181),

            array("gong", -18012),

            array("gou", -17997),

            array("gu", -17988),

            array("gua", -17970),

            array("guai", -17964),

            array("guan", -17961),

            array("guang", -17950),

            array("gui", -17947),

            array("gun", -17931),

            array("guo", -17928),

            array("ha", -17922),

            array("hai", -17759),

            array("han", -17752),

            array("hang", -17733),

            array("hao", -17730),

            array("he", -17721),

            array("hei", -17703),

            array("hen", -17701),

            array("heng", -17697),

            array("hong", -17692),

            array("hou", -17683),

            array("hu", -17676),

            array("hua", -17496),

            array("huai", -17487),

            array("huan", -17482),

            array("huang", -17468),

            array("hui", -17454),

            array("hun", -17433),

            array("huo", -17427),

            array("ji", -17417),

            array("jia", -17202),

            array("jian", -17185),

            array("jiang", -16983),

            array("jiao", -16970),

            array("jie", -16942),

            array("jin", -16915),

            array("jing", -16733),

            array("jiong", -16708),

            array("jiu", -16706),

            array("ju", -16689),

            array("juan", -16664),

            array("jue", -16657),

            array("jun", -16647),

            array("ka", -16474),

            array("kai", -16470),

            array("kan", -16465),

            array("kang", -16459),

            array("kao", -16452),

            array("ke", -16448),

            array("ken", -16433),

            array("keng", -16429),

            array("kong", -16427),

            array("kou", -16423),

            array("ku", -16419),

            array("kua", -16412),

            array("kuai", -16407),

            array("kuan", -16403),

            array("kuang", -16401),

            array("kui", -16393),

            array("kun", -16220),

            array("kuo", -16216),

            array("la", -16212),

            array("lai", -16205),

            array("lan", -16202),

            array("lang", -16187),

            array("lao", -16180),

            array("le", -16171),

            array("lei", -16169),

            array("leng", -16158),

            array("li", -16155),

            array("lia", -15959),

            array("lian", -15958),

            array("liang", -15944),

            array("liao", -15933),

            array("lie", -15920),

            array("lin", -15915),

            array("ling", -15903),

            array("liu", -15889),

            array("long", -15878),

            array("lou", -15707),

            array("lu", -15701),

            array("lv", -15681),

            array("luan", -15667),

            array("lue", -15661),

            array("lun", -15659),

            array("luo", -15652),

            array("ma", -15640),

            array("mai", -15631),

            array("man", -15625),

            array("mang", -15454),

            array("mao", -15448),

            array("me", -15436),

            array("mei", -15435),

            array("men", -15419),

            array("meng", -15416),

            array("mi", -15408),

            array("mian", -15394),

            array("miao", -15385),

            array("mie", -15377),

            array("min", -15375),

            array("ming", -15369),

            array("miu", -15363),

            array("mo", -15362),

            array("mou", -15183),

            array("mu", -15180),

            array("na", -15165),

            array("nai", -15158),

            array("nan", -15153),

            array("nang", -15150),

            array("nao", -15149),

            array("ne", -15144),

            array("nei", -15143),

            array("nen", -15141),

            array("neng", -15140),

            array("ni", -15139),

            array("nian", -15128),

            array("niang", -15121),

            array("niao", -15119),

            array("nie", -15117),

            array("nin", -15110),

            array("ning", -15109),

            array("niu", -14941),

            array("nong", -14937),

            array("nu", -14933),

            array("nv", -14930),

            array("nuan", -14929),

            array("nue", -14928),

            array("nuo", -14926),

            array("o", -14922),

            array("ou", -14921),

            array("pa", -14914),

            array("pai", -14908),

            array("pan", -14902),

            array("pang", -14894),

            array("pao", -14889),

            array("pei", -14882),

            array("pen", -14873),

            array("peng", -14871),

            array("pi", -14857),

            array("pian", -14678),

            array("piao", -14674),

            array("pie", -14670),

            array("pin", -14668),

            array("ping", -14663),

            array("po", -14654),

            array("pu", -14645),

            array("qi", -14630),

            array("qia", -14594),

            array("qian", -14429),

            array("qiang", -14407),

            array("qiao", -14399),

            array("qie", -14384),

            array("qin", -14379),

            array("qing", -14368),

            array("qiong", -14355),

            array("qiu", -14353),

            array("qu", -14345),

            array("quan", -14170),

            array("que", -14159),

            array("qun", -14151),

            array("ran", -14149),

            array("rang", -14145),

            array("rao", -14140),

            array("re", -14137),

            array("ren", -14135),

            array("reng", -14125),

            array("ri", -14123),

            array("rong", -14122),

            array("rou", -14112),

            array("ru", -14109),

            array("ruan", -14099),

            array("rui", -14097),

            array("run", -14094),

            array("ruo", -14092),

            array("sa", -14090),

            array("sai", -14087),

            array("san", -14083),

            array("sang", -13917),

            array("sao", -13914),

            array("se", -13910),

            array("sen", -13907),

            array("seng", -13906),

            array("sha", -13905),

            array("shai", -13896),

            array("shan", -13894),

            array("shang", -13878),

            array("shao", -13870),

            array("she", -13859),

            array("shen", -13847),

            array("sheng", -13831),

            array("shi", -13658),

            array("shou", -13611),

            array("shu", -13601),

            array("shua", -13406),

            array("shuai", -13404),

            array("shuan", -13400),

            array("shuang", -13398),

            array("shui", -13395),

            array("shun", -13391),

            array("shuo", -13387),

            array("si", -13383),

            array("song", -13367),

            array("sou", -13359),

            array("su", -13356),

            array("suan", -13343),

            array("sui", -13340),

            array("sun", -13329),

            array("suo", -13326),

            array("ta", -13318),

            array("tai", -13147),

            array("tan", -13138),

            array("tang", -13120),

            array("tao", -13107),

            array("te", -13096),

            array("teng", -13095),

            array("ti", -13091),

            array("tian", -13076),

            array("tiao", -13068),

            array("tie", -13063),

            array("ting", -13060),

            array("tong", -12888),

            array("tou", -12875),

            array("tu", -12871),

            array("tuan", -12860),

            array("tui", -12858),

            array("tun", -12852),

            array("tuo", -12849),

            array("wa", -12838),

            array("wai", -12831),

            array("wan", -12829),

            array("wang", -12812),

            array("wei", -12802),

            array("wen", -12607),

            array("weng", -12597),

            array("wo", -12594),

            array("wu", -12585),

            array("xi", -12556),

            array("xia", -12359),

            array("xian", -12346),

            array("xiang", -12320),

            array("xiao", -12300),

            array("xie", -12120),

            array("xin", -12099),

            array("xing", -12089),

            array("xiong", -12074),

            array("xiu", -12067),

            array("xu", -12058),

            array("xuan", -12039),

            array("xue", -11867),

            array("xun", -11861),

            array("ya", -11847),

            array("yan", -11831),

            array("yang", -11798),

            array("yao", -11781),

            array("ye", -11604),

            array("yi", -11589),

            array("yin", -11536),

            array("ying", -11358),

            array("yo", -11340),

            array("yo", -11340),

            array("yong", -11339),

            array("you", -11324),

            array("yu", -11303),

            array("yuan", -11097),

     
a0ec
      array("yue", -11077),

            array("yun", -11067),

            array("za", -11055),

            array("zai", -11052),

            array("zan", -11045),

            array("zang", -11041),

            array("zao", -11038),

            array("ze", -11024),

            array("zei", -11020),

            array("zen", -11019),

            array("zeng", -11018),

            array("zha", -11014),

            array("zhai", -10838),

            array("zhan", -10832),

            array("zhang", -10815),

            array("zhao", -10800),

            array("zhe", -10790),

            array("zhen", -10780),

            array("zheng", -10764),

            array("zhi", -10587),

            array("zhong", -10544),

            array("zhou", -10533),

            array("zhu", -10519),

            array("zhua", -10331),

            array("zhuai", -10329),

            array("zhuan", -10328),

            array("zhuang", -10322),

            array("zhui", -10315),

            array("zhun", -10309),

            array("zhuo", -10307),

            array("zi", -10296),

            array("zong", -10281),

            array("zou", -10274),

            array("zu", -10270),

            array("zuan", -10262),

            array("zui", -10260),

            array("zun", -10256),

            array("zuo", -10254),

        );

    }

    /**

     * 编码转换

     * @param type $from

     * @param type $to

     * @param type $fContents

     * @return type

     */

    protected function iconvStr($from, $to, $fContents) {

        if (is_string($fContents)) {

            if (function_exists('mb_convert_encoding')) {

                return mb_convert_encoding($fContents, $to, $from);

            } else if (function_exists('iconv')) {

                return iconv($from, $to, $fContents);

            } else {

                return $fContents;

            }

        }

    }

    /**

     * 析构函数

     * @access public

     * @return void

     */

    public function __destruct() {

        if (isset($this->lib)) {

            unset($this->lib);

        }

    }

}

?>

这样我们写一个测试文件p.php

代码:

<?php

/**

 * string test

 * anke

 */

 

require_once'Pinyin.class.php';//引入类

$str="齐天大圣";

$p=new Pinyin();

$out=$p->output($str);//汉字转换拼音

$firstStr=substr($out,0,1);//截取首字母

$upStr=strtoupper($firstStr);//首字母大写

echo "转换前:".$str.'<br>';

echo "转换后:".$out.'<br>';

echo "首字母:".$firstStr.'<br>';

echo "首字母大写:".$upStr;

我们在访问这个文件会看到:

转换前:齐天大圣
转换后:qitiandasheng
首字母:q
首字母大写:Q
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: