php根据汉字获取拼音(php基于拼音搜索实现原理)

代码一:获取字符串汉字首字母,兼容GBK和UTF-8

<?php
function getfirstchar($s0){   //获取单个汉字拼音首字母。注意:此处不要纠结。汉字拼音是没有以U和V开头的
    $fchar = ord($s0{0});
    if($fchar >= ord("A"and $fchar <= ord("z") )return strtoupper($s0{0});
    $s1 = iconv("UTF-8","gb2312"$s0);
    $s2 = iconv("gb2312","UTF-8"$s1);
    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;
}
echo pinyin_long('*《,@#$123HAHadf一年后');
?>

输出:

代码二:获取字符串全拼,仅支持GBK

<?php
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 $numbreak;
                $result $spell;
            }
            return $result;
        }
    }
       
    /**
    * 取汉字拼音
    * @param string $chinese 要转换的汉字
    * @param string $delimiter 分隔符
    * @param int $first 是否只返回第一个
    * @return string
    */
    public function getChineseSpells($chinese$delimiter ''$first=0){
        $result array();
        for($i=0; $i<strlen($chinese); $i++){
            $p = ord(substr($chinese,$i,1));
            if($p>160){
                $q = ord(substr($chinese,++$i,1));
                $p $p*256 + $q - 65536;
            }
            $result[] = $this->getChineseSpell($p);
            if($first){
                return $result[0];
            }
        }
        return implode($delimiter$result);
    }
}
$ok=new ChineseSpell();
$str='%^&《》:“{}AGDFasdfas===取汉字所有拼音';
echo $ok->getFullSpell($str);
echo '<p />';
echo $ok->getChineseSpells($str);
?>

输出:

本文出自 “PHPer许琴-专注于PHP技术” 博客,请务必保留此出处http://xuqin.blog.51cto.com/5183168/1223888

php根据汉字获取拼音(php基于拼音搜索实现原理)的更多相关文章

  1. C#中实现输入汉字获取其拼音(汉字转拼音)的2种方法

    主要介绍了C#中实现输入汉字获取其拼音(汉字转拼音)的2种方法,本文分别给出了使用微软语言包.手动编码实现两种实现方式,需要的朋友可以参考下 本文刚发布时,只写了一个实现方式,使用的是微软的语言包,但 ...

  2. JS实现获取汉字首字母拼音、全拼音及混拼音的方法

    本文实例讲述了JS实现获取汉字首字母拼音.全拼音及混拼音的方法.分享给大家供大家参考,具体如下: 这里需要用到一个js获取汉字拼音的插件,可点击此处本站下载. 运行效果如下: 完整示例代码: ? 1 ...

  3. C#将汉字转换成全拼的拼音EcanConvertToCh帮助类 (转)

    点击下载 EcanConvertToCh.rar 主要功能就是将汉字转换成全拼的拼音,只要你输入一个汉字就会相应的转成拼音 /// <summary> /// 编 码 人:苏飞 /// 联 ...

  4. Java实现文本编辑时基于拼音输入的补全原型

    续前文Java实现"命令式"简易文本编辑器原型. 效果如下: 所在源码库同上文, 尚未和上文的编辑器右侧的命令区集成. 代码由How to show autocomplete as ...

  5. Android实现中文汉字笔划(笔画)、中文拼音排序、英文排序

    发布时间:2018-11-16   技术:Android   概述 最近要做一个类似微信的,在登录界面选择国家地区的功能,微信有中文汉字笔画排序以及中文拼音排序等几种方式,如下所示: 简体中文 拼音排 ...

  6. C#汉字转换成全拼的拼音

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)

        oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)   效果如下: Oracle 字符集 GBK 没有问题 , UTF -8 需要修改一下   Sql代码   --oracle汉字转拼 ...

  8. es 修改拼音分词器源码实现汉字/拼音/简拼混合搜索时同音字不匹配

    [版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 在业务中经常会用到拼音匹配查询,大家都会用到拼音分词器,但是拼音分词器匹配的 ...

  9. python 全栈开发,Day116(可迭代对象,type创建动态类,偏函数,面向对象的封装,获取外键数据,组合搜索,领域驱动设计(DDD))

    昨日内容回顾 1. 三个类 ChangeList,封装列表页面需要的所有数据. StarkConfig,生成URL和视图对应关系 + 默认配置 AdminSite,用于保存 数据库类 和 处理该类的对 ...

随机推荐

  1. Linux 入门记录:一、命令行 Bash 的基本操作

    为了以后长期的线上测试和服务器的性能考量,要用 Linux 服务器了.昨晚装了个 CentOS 6.9,今天开始学学 Linux 基础,扫扫盲.ok,小本本记 ing... 一.Shell简介 She ...

  2. 64_l6

    lightdm-qt5-devel-1.22.0-1.fc26.i686.rpm 19-May-2017 11:11 22854 lightdm-qt5-devel-1.22.0-1.fc26.x86 ...

  3. 【HDU5306】Gorgeous Sequence

    这个题目是Segment-Tree-beats的论文的第一题. 首先我们考虑下这个问题的不同之处在于,有一个区间对x取max的操作. 那么如何维护这个操作呢? 就是对于线段树的区间,维护一个最大值标记 ...

  4. ASP .NET CORE 部署linux 系统上的所需要的sdk 使用链接

    https://www.microsoft.com/net/learn/get-started/linuxopensuse

  5. mac系统安装mysql

    1.下载 打开官网:https://www.mysql.com 进入DOWNLOADS--->Community--->MySQL Community Server--->DOWNL ...

  6. io流中比较特殊的流-java

    1.序列流(SequenceInputStream)整合个多个文件 A SequenceInputStream表示其他输入流的逻辑级联. 它从一个有序的输入流集合开始,从第一个读取到文件的结尾,然后从 ...

  7. spring mvc注解文件上传下载

    需要两个包: 包如何导入就不介绍了,前端代码如下(一定要加enctype="multipart/form-data"让服务器知道是文件上传): <form action=&q ...

  8. centos 7 防火墙设置

    一.介绍 centos 7 的防火墙是以firewalld daemon的形式存在,区别于iptables 二.使用方法 centos7 主要通过firewall-cmd命令来管理firewall, ...

  9. 【JBPM4】判断节点decision 方法1

    JPDL <?xml version="1.0" encoding="UTF-8"?> <process key="decision ...

  10. AC日记——[Sdoi2010]粟粟的书架 bzoj 1926

    1926 思路: 主席树+二分水题: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 500005 #defi ...