找回密码
 注册账号

QQ登录

只需一步,快速开始

《泰拉瑞亚下载-1.4.2.3版》 泰拉瑞亚服务器 - MOD模组下载

入驻泰拉战网 新手指引 - 升级 - 师徒

泰拉瑞亚合成表 泰拉卡牌 - 泰拉江湖 - 泰拉刺客

联系泰拉开发组👈进入 积分市场 - 房产交易 - 水晶获取

查看: 2571|回复: 0

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

[复制链接]

431

主题

77

回帖

8

广播

论坛版主

积分
214
泰拉
0
水晶
10
铜钥匙
0
银钥匙
0
金钥匙
0

【江湖新秀】【宝剑回鞘】【泰拉达人】【奥运选手】

发表于 2021-3-16 11:39:55 | 显示全部楼层 |阅读模式
  1. <?php
  2. function getfirstchar($s0){   //获取单个汉字拼音首字母。注意:此处不要纠结。汉字拼音是没有以U和V开头的
  3.     $fchar = ord($s0{0});
  4.     if($fchar >= ord("A") and $fchar <= ord("z") )return strtoupper($s0{0});
  5.     $s1 = iconv("UTF-8","gb2312", $s0);
  6.     $s2 = iconv("gb2312","UTF-8", $s1);
  7.     if($s2 == $s0){$s = $s1;}else{$s = $s0;}
  8.     $asc = ord($s{0}) * 256 + ord($s{1}) - 65536;
  9.     if($asc >= -20319 and $asc <= -20284) return "A";
  10.     if($asc >= -20283 and $asc <= -19776) return "B";
  11.     if($asc >= -19775 and $asc <= -19219) return "C";
  12.     if($asc >= -19218 and $asc <= -18711) return "D";
  13.     if($asc >= -18710 and $asc <= -18527) return "E";
  14.     if($asc >= -18526 and $asc <= -18240) return "F";
  15.     if($asc >= -18239 and $asc <= -17923) return "G";
  16.     if($asc >= -17922 and $asc <= -17418) return "H";
  17.     if($asc >= -17922 and $asc <= -17418) return "I";
  18.     if($asc >= -17417 and $asc <= -16475) return "J";
  19.     if($asc >= -16474 and $asc <= -16213) return "K";
  20.     if($asc >= -16212 and $asc <= -15641) return "L";
  21.     if($asc >= -15640 and $asc <= -15166) return "M";
  22.     if($asc >= -15165 and $asc <= -14923) return "N";
  23.     if($asc >= -14922 and $asc <= -14915) return "O";
  24.     if($asc >= -14914 and $asc <= -14631) return "P";
  25.     if($asc >= -14630 and $asc <= -14150) return "Q";
  26.     if($asc >= -14149 and $asc <= -14091) return "R";
  27.     if($asc >= -14090 and $asc <= -13319) return "S";
  28.     if($asc >= -13318 and $asc <= -12839) return "T";
  29.     if($asc >= -12838 and $asc <= -12557) return "W";
  30.     if($asc >= -12556 and $asc <= -11848) return "X";
  31.     if($asc >= -11847 and $asc <= -11056) return "Y";
  32.     if($asc >= -11055 and $asc <= -10247) return "Z";
  33.     return NULL;
  34.     //return $s0;
  35. }
  36. function pinyin_long($zh){  //获取整条字符串汉字拼音首字母
  37.     $ret = "";
  38.     $s1 = iconv("UTF-8","gb2312", $zh);
  39.     $s2 = iconv("gb2312","UTF-8", $s1);
  40.     if($s2 == $zh){$zh = $s1;}
  41.     for($i = 0; $i < strlen($zh); $i++){
  42.         $s1 = substr($zh,$i,1);
  43.         $p = ord($s1);
  44.         if($p > 160){
  45.             $s2 = substr($zh,$i++,2);
  46.             $ret .= getfirstchar($s2);
  47.         }else{
  48.             $ret .= $s1;
  49.         }
  50.     }
  51.     return $ret;
  52. }
  53. echo pinyin_long('*《,@#$123HAHadf一年后');
  54. ?>
复制代码


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


  1. <?php
  2. class ChineseSpell {//注意仅支持:GBK,故传入参数前须转码
  3.     /**
  4.     * @var array $chineseSpellList 拼音编码对应表
  5.     * @access private
  6.     */
  7.     private $chineseSpellList = array(
  8.     'a'=>-20319,
  9.     'ai'=>-20317,
  10.     'an'=>-20304,
  11.     'ang'=>-20295,
  12.     'ao'=>-20292,
  13.     'ba'=>-20283,
  14.     'bai'=>-20265,
  15.     'ban'=>-20257,
  16.     'bang'=>-20242,
  17.     'bao'=>-20230,
  18.     'bei'=>-20051,
  19.     'ben'=>-20036,
  20.     'beng'=>-20032,
  21.     'bi'=>-20026,
  22.     'bian'=>-20002,
  23.     'biao'=>-19990,
  24.     'bie'=>-19986,
  25.     'bin'=>-19982,
  26.     'bing'=>-19976,
  27.     'bo'=>-19805,
  28.     'bu'=>-19784,
  29.     'ca'=>-19775,
  30.     'cai'=>-19774,
  31.     'can'=>-19763,
  32.     'cang'=>-19756,
  33.     'cao'=>-19751,
  34.     'ce'=>-19746,
  35.     'ceng'=>-19741,
  36.     'cha'=>-19739,
  37.     'chai'=>-19728,
  38.     'chan'=>-19725,
  39.     'chang'=>-19715,
  40.     'chao'=>-19540,
  41.     'che'=>-19531,
  42.     'chen'=>-19525,
  43.     'cheng'=>-19515,
  44.     'chi'=>-19500,
  45.     'chong'=>-19484,
  46.     'chou'=>-19479,
  47.     'chu'=>-19467,
  48.     'chuai'=>-19289,
  49.     'chuan'=>-19288,
  50.     'chuang'=>-19281,
  51.     'chui'=>-19275,
  52.     'chun'=>-19270,
  53.     'chuo'=>-19263,
  54.     'ci'=>-19261,
  55.     'cong'=>-19249,
  56.     'cou'=>-19243,
  57.     'cu'=>-19242,
  58.     'cuan'=>-19238,
  59.     'cui'=>-19235,
  60.     'cun'=>-19227,
  61.     'cuo'=>-19224,
  62.     'da'=>-19218,
  63.     'dai'=>-19212,
  64.     'dan'=>-19038,
  65.     'dang'=>-19023,
  66.     'dao'=>-19018,
  67.     'de'=>-19006,
  68.     'deng'=>-19003,
  69.     'di'=>-18996,
  70.     'dian'=>-18977,
  71.     'diao'=>-18961,
  72.     'die'=>-18952,
  73.     'ding'=>-18783,
  74.     'diu'=>-18774,
  75.     'dong'=>-18773,
  76.     'dou'=>-18763,
  77.     'du'=>-18756,
  78.     'duan'=>-18741,
  79.     'dui'=>-18735,
  80.     'dun'=>-18731,
  81.     'duo'=>-18722,
  82.     'e'=>-18710,
  83.     'en'=>-18697,
  84.     'er'=>-18696,
  85.     'fa'=>-18526,
  86.     'fan'=>-18518,
  87.     'fang'=>-18501,
  88.     'fei'=>-18490,
  89.     'fen'=>-18478,
  90.     'feng'=>-18463,
  91.     'fo'=>-18448,
  92.     'fou'=>-18447,
  93.     'fu'=>-18446,
  94.     'ga'=>-18239,
  95.     'gai'=>-18237,
  96.     'gan'=>-18231,
  97.     'gang'=>-18220,
  98.     'gao'=>-18211,
  99.     'ge'=>-18201,
  100.     'gei'=>-18184,
  101.     'gen'=>-18183,
  102.     'geng'=>-18181,
  103.     'gong'=>-18012,
  104.     'gou'=>-17997,
  105.     'gu'=>-17988,
  106.     'gua'=>-17970,
  107.     'guai'=>-17964,
  108.     'guan'=>-17961,
  109.     'guang'=>-17950,
  110.     'gui'=>-17947,
  111.     'gun'=>-17931,
  112.     'guo'=>-17928,
  113.     'ha'=>-17922,
  114.     'hai'=>-17759,
  115.     'han'=>-17752,
  116.     'hang'=>-17733,
  117.     'hao'=>-17730,
  118.     'he'=>-17721,
  119.     'hei'=>-17703,
  120.     'hen'=>-17701,
  121.     'heng'=>-17697,
  122.     'hong'=>-17692,
  123.     'hou'=>-17683,
  124.     'hu'=>-17676,
  125.     'hua'=>-17496,
  126.     'huai'=>-17487,
  127.     'huan'=>-17482,
  128.     'huang'=>-17468,
  129.     'hui'=>-17454,
  130.     'hun'=>-17433,
  131.     'huo'=>-17427,
  132.     'ji'=>-17417,
  133.     'jia'=>-17202,
  134.     'jian'=>-17185,
  135.     'jiang'=>-16983,
  136.     'jiao'=>-16970,
  137.     'jie'=>-16942,
  138.     'jin'=>-16915,
  139.     'jing'=>-16733,
  140.     'jiong'=>-16708,
  141.     'jiu'=>-16706,
  142.     'ju'=>-16689,
  143.     'juan'=>-16664,
  144.     'jue'=>-16657,
  145.     'jun'=>-16647,
  146.     'ka'=>-16474,
  147.     'kai'=>-16470,
  148.     'kan'=>-16465,
  149.     'kang'=>-16459,
  150.     'kao'=>-16452,
  151.     'ke'=>-16448,
  152.     'ken'=>-16433,
  153.     'keng'=>-16429,
  154.     'kong'=>-16427,
  155.     'kou'=>-16423,
  156.     'ku'=>-16419,
  157.     'kua'=>-16412,
  158.     'kuai'=>-16407,
  159.     'kuan'=>-16403,
  160.     'kuang'=>-16401,
  161.     'kui'=>-16393,
  162.     'kun'=>-16220,
  163.     'kuo'=>-16216,
  164.     'la'=>-16212,
  165.     'lai'=>-16205,
  166.     'lan'=>-16202,
  167.     'lang'=>-16187,
  168.     'lao'=>-16180,
  169.     'le'=>-16171,
  170.     'lei'=>-16169,
  171.     'leng'=>-16158,
  172.     'li'=>-16155,
  173.     'lia'=>-15959,
  174.     'lian'=>-15958,
  175.     'liang'=>-15944,
  176.     'liao'=>-15933,
  177.     'lie'=>-15920,
  178.     'lin'=>-15915,
  179.     'ling'=>-15903,
  180.     'liu'=>-15889,
  181.     'long'=>-15878,
  182.     'lou'=>-15707,
  183.     'lu'=>-15701,
  184.     'lv'=>-15681,
  185.     'luan'=>-15667,
  186.     'lue'=>-15661,
  187.     'lun'=>-15659,
  188.     'luo'=>-15652,
  189.     'ma'=>-15640,
  190.     'mai'=>-15631,
  191.     'man'=>-15625,
  192.     'mang'=>-15454,
  193.     'mao'=>-15448,
  194.     'me'=>-15436,
  195.     'mei'=>-15435,
  196.     'men'=>-15419,
  197.     'meng'=>-15416,
  198.     'mi'=>-15408,
  199.     'mian'=>-15394,
  200.     'miao'=>-15385,
  201.     'mie'=>-15377,
  202.     'min'=>-15375,
  203.     'ming'=>-15369,
  204.     'miu'=>-15363,
  205.     'mo'=>-15362,
  206.     'mou'=>-15183,
  207.     'mu'=>-15180,
  208.     'na'=>-15165,
  209.     'nai'=>-15158,
  210.     'nan'=>-15153,
  211.     'nang'=>-15150,
  212.     'nao'=>-15149,
  213.     'ne'=>-15144,
  214.     'nei'=>-15143,
  215.     'nen'=>-15141,
  216.     'neng'=>-15140,
  217.     'ni'=>-15139,
  218.     'nian'=>-15128,
  219.     'niang'=>-15121,
  220.     'niao'=>-15119,
  221.     'nie'=>-15117,
  222.     'nin'=>-15110,
  223.     'ning'=>-15109,
  224.     'niu'=>-14941,
  225.     'nong'=>-14937,
  226.     'nu'=>-14933,
  227.     'nv'=>-14930,
  228.     'nuan'=>-14929,
  229.     'nue'=>-14928,
  230.     'nuo'=>-14926,
  231.     'o'=>-14922,
  232.     'ou'=>-14921,
  233.     'pa'=>-14914,
  234.     'pai'=>-14908,
  235.     'pan'=>-14902,
  236.     'pang'=>-14894,
  237.     'pao'=>-14889,
  238.     'pei'=>-14882,
  239.     'pen'=>-14873,
  240.     'peng'=>-14871,
  241.     'pi'=>-14857,
  242.     'pian'=>-14678,
  243.     'piao'=>-14674,
  244.     'pie'=>-14670,
  245.     'pin'=>-14668,
  246.     'ping'=>-14663,
  247.     'po'=>-14654,
  248.     'pu'=>-14645,
  249.     'qi'=>-14630,
  250.     'qia'=>-14594,
  251.     'qian'=>-14429,
  252.     'qiang'=>-14407,
  253.     'qiao'=>-14399,
  254.     'qie'=>-14384,
  255.     'qin'=>-14379,
  256.     'qing'=>-14368,
  257.     'qiong'=>-14355,
  258.     'qiu'=>-14353,
  259.     'qu'=>-14345,
  260.     'quan'=>-14170,
  261.     'que'=>-14159,
  262.     'qun'=>-14151,
  263.     'ran'=>-14149,
  264.     'rang'=>-14145,
  265.     'rao'=>-14140,
  266.     're'=>-14137,
  267.     'ren'=>-14135,
  268.     'reng'=>-14125,
  269.     'ri'=>-14123,
  270.     'rong'=>-14122,
  271.     'rou'=>-14112,
  272.     'ru'=>-14109,
  273.     'ruan'=>-14099,
  274.     'rui'=>-14097,
  275.     'run'=>-14094,
  276.     'ruo'=>-14092,
  277.     'sa'=>-14090,
  278.     'sai'=>-14087,
  279.     'san'=>-14083,
  280.     'sang'=>-13917,
  281.     'sao'=>-13914,
  282.     'se'=>-13910,
  283.     'sen'=>-13907,
  284.     'seng'=>-13906,
  285.     'sha'=>-13905,
  286.     'shai'=>-13896,
  287.     'shan'=>-13894,
  288.     'shang'=>-13878,
  289.     'shao'=>-13870,
  290.     'she'=>-13859,
  291.     'shen'=>-13847,
  292.     'sheng'=>-13831,
  293.     'shi'=>-13658,
  294.     'shou'=>-13611,
  295.     'shu'=>-13601,
  296.     'shua'=>-13406,
  297.     'shuai'=>-13404,
  298.     'shuan'=>-13400,
  299.     'shuang'=>-13398,
  300.     'shui'=>-13395,
  301.     'shun'=>-13391,
  302.     'shuo'=>-13387,
  303.     'si'=>-13383,
  304.     'song'=>-13367,
  305.     'sou'=>-13359,
  306.     'su'=>-13356,
  307.     'suan'=>-13343,
  308.     'sui'=>-13340,
  309.     'sun'=>-13329,
  310.     'suo'=>-13326,
  311.     'ta'=>-13318,
  312.     'tai'=>-13147,
  313.     'tan'=>-13138,
  314.     'tang'=>-13120,
  315.     'tao'=>-13107,
  316.     'te'=>-13096,
  317.     'teng'=>-13095,
  318.     'ti'=>-13091,
  319.     'tian'=>-13076,
  320.     'tiao'=>-13068,
  321.     'tie'=>-13063,
  322.     'ting'=>-13060,
  323.     'tong'=>-12888,
  324.     'tou'=>-12875,
  325.     'tu'=>-12871,
  326.     'tuan'=>-12860,
  327.     'tui'=>-12858,
  328.     'tun'=>-12852,
  329.     'tuo'=>-12849,
  330.     'wa'=>-12838,
  331.     'wai'=>-12831,
  332.     'wan'=>-12829,
  333.     'wang'=>-12812,
  334.     'wei'=>-12802,
  335.     'wen'=>-12607,
  336.     'weng'=>-12597,
  337.     'wo'=>-12594,
  338.     'wu'=>-12585,
  339.     'xi'=>-12556,
  340.     'xia'=>-12359,
  341.     'xian'=>-12346,
  342.     'xiang'=>-12320,
  343.     'xiao'=>-12300,
  344.     'xie'=>-12120,
  345.     'xin'=>-12099,
  346.     'xing'=>-12089,
  347.     'xiong'=>-12074,
  348.     'xiu'=>-12067,
  349.     'xu'=>-12058,
  350.     'xuan'=>-12039,
  351.     'xue'=>-11867,
  352.     'xun'=>-11861,
  353.     'ya'=>-11847,
  354.     'yan'=>-11831,
  355.     'yang'=>-11798,
  356.     'yao'=>-11781,
  357.     'ye'=>-11604,
  358.     'yi'=>-11589,
  359.     'yin'=>-11536,
  360.     'ying'=>-11358,
  361.     'yo'=>-11340,
  362.     'yong'=>-11339,
  363.     'you'=>-11324,
  364.     'yu'=>-11303,
  365.     'yuan'=>-11097,
  366.     'yue'=>-11077,
  367.     'yun'=>-11067,
  368.     'za'=>-11055,
  369.     'zai'=>-11052,
  370.     'zan'=>-11045,
  371.     'zang'=>-11041,
  372.     'zao'=>-11038,
  373.     'ze'=>-11024,
  374.     'zei'=>-11020,
  375.     'zen'=>-11019,
  376.     'zeng'=>-11018,
  377.     'zha'=>-11014,
  378.     'zhai'=>-10838,
  379.     'zhan'=>-10832,
  380.     'zhang'=>-10815,
  381.     'zhao'=>-10800,
  382.     'zhe'=>-10790,
  383.     'zhen'=>-10780,
  384.     'zheng'=>-10764,
  385.     'zhi'=>-10587,
  386.     'zhong'=>-10544,
  387.     'zhou'=>-10533,
  388.     'zhu'=>-10519,
  389.     'zhua'=>-10331,
  390.     'zhuai'=>-10329,
  391.     'zhuan'=>-10328,
  392.     'zhuang'=>-10322,
  393.     'zhui'=>-10315,
  394.     'zhun'=>-10309,
  395.     'zhuo'=>-10307,
  396.     'zi'=>-10296,
  397.     'zong'=>-10281,
  398.     'zou'=>-10274,
  399.     'zu'=>-10270,
  400.     'zuan'=>-10262,
  401.     'zui'=>-10260,
  402.     'zun'=>-10256,
  403.     'zuo'=>-10254
  404.     );
  405.                        
  406.     /**
  407.     * 取汉字所有拼音
  408.     * @param string $chinese 要转换的汉字
  409.     * @param string $delimiter 分隔符
  410.     * @param int $length 返回的长度
  411.     * @return string
  412.     */
  413.     public function getFullSpell($chinese, $delimiter = '', $length = 0){
  414.         $spell = $this->getChineseSpells($chinese, $delimiter);
  415.         if($length){
  416.             $spell = substr($spell, 0, $length);
  417.         }
  418.         return $spell;
  419.     }
  420.       
  421.     /**
  422.     * 取汉字第【一个】汉字完整拼音
  423.     * @param string $chinese 要转换的汉字
  424.     * @param int $length 返回的长度
  425.     * @return string
  426.     */
  427.     public function getFirstSpell($chinese, $length = 0){
  428.         $spell = $this->getChineseSpells($chinese, ' ', 1);
  429.         if($length){
  430.             $spell = substr($spell, 0, $length);
  431.         }
  432.         return $spell;
  433.     }
  434.       
  435.     /**
  436.     * 取一个汉字码对应的拼音
  437.     * @param int $num 汉字码
  438.     * @param string $blank 空白字符
  439.     * @return string
  440.     */
  441.     public function getChineseSpell ($num, $blank = ''){
  442.         if($num>0 && $num<160){
  443.             return chr($num);
  444.         }
  445.         elseif($num<-20319||$num>-10247){
  446.             return $blank;
  447.         }
  448.         else{
  449.             foreach ($this->chineseSpellList as $spell => $code){
  450.                 if ($code > $num) break;
  451.                 $result = $spell;
  452.             }
  453.             return $result;
  454.         }
  455.     }
  456.       
  457.     /**
  458.     * 取汉字拼音
  459.     * @param string $chinese 要转换的汉字
  460.     * @param string $delimiter 分隔符
  461.     * @param int $first 是否只返回第一个
  462.     * @return string
  463.     */
  464.     public function getChineseSpells($chinese, $delimiter = '', $first=0){
  465.         $result = array();
  466.         for($i=0; $i<strlen($chinese); $i++){
  467.             $p = ord(substr($chinese,$i,1));
  468.             if($p>160){
  469.                 $q = ord(substr($chinese,++$i,1));
  470.                 $p = $p*256 + $q - 65536;
  471.             }
  472.             $result[] = $this->getChineseSpell($p);
  473.             if($first){
  474.                 return $result[0];
  475.             }
  476.         }
  477.         return implode($delimiter, $result);
  478.     }
  479. }
  480. $ok=new ChineseSpell();
  481. $str='%^&《》:“{}AGDFasdfas===取汉字所有拼音';
  482. echo $ok->getFullSpell($str);
  483. echo '<p />';
  484. echo $ok->getChineseSpells($str);
  485. ?>
复制代码


获得 大财神卡 一张

卡片说明:mickeyort 遇到 [老神仙离歌] 被赠与 4 铜钥匙.

卡片效果:获得 4 铜钥匙

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|友链申请|Archiver|手机版|小黑屋|游芯沙盒 ( 陕ICP备11006283号-1 )

GMT+8, 2024-5-3 15:15 , Processed in 0.136782 second(s), 37 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表