PHP基于自定义函数实现的汉字转拼音功能实例
作者:崇拜飞哥
这篇文章主要介绍了PHP基于自定义函数实现的汉字转拼音功能,涉及php表单及字符串编码转换、遍历等相关操作技巧,需要的朋友可以参考下
本文实例讲述了PHP基于自定义函数实现的汉字转拼音功能。分享给大家供大家参考,具体如下:
整个过程用到了pinyin.table文件。
pinyin.php
<?php header("Content-Type:text/html;charset=utf-8"); $letters = ""; if ($_GET) { $cat_name = $_GET["cat_name"]; $catname = convert($cat_name); $letters = get_letter($catname, false); } function get_letter($catname, $letter = true) { return $letter ? strtolower(substr(gb2py($catname), 0, 1)) : str_replace(' ', '', gb2py($catname)); } function gb2py($text, $exp = '') { if(!$text) return ''; $data = array(); $tmp = @file('pinyin.table'); // 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。 if(!$tmp) return ''; $tmps = count($tmp); for($i = 0; $i < $tmps; $i++) { $tmp1 = explode(" ", $tmp[$i]); $data[$i]=array($tmp1[0], $tmp1[1]); } $r = array(); $k = 0; $textlen = strlen($text); for($i = 0; $i < $textlen; $i++) { $p = ord(substr($text, $i, 1)); if($p > 160) { $q = ord(substr($text, ++$i, 1)); $p = $p*256+$q-65536; } if($p > 0 && $p < 160) { $r[$k] = chr($p); } elseif($p< -20319 || $p > -10247) { $r[$k] = ''; } else { for($j = $tmps-1; $j >= 0; $j--) { if($data[$j][1]<=$p) break; } $r[$k] = $data[$j][0]; } $k++; } return implode($exp, $r); } function convert($str, $from = 'utf-8', $to = 'gb2312') { if(!$str) return ''; $from = strtolower($from); $to = strtolower($to); if($from == $to) return $str; $from = str_replace('gbk', 'gb2312', $from); $to = str_replace('gbk', 'gb2312', $to); $from = str_replace('utf8', 'utf-8', $from); $to = str_replace('utf8', 'utf-8', $to); if($from == $to) return $str; $tmp = array(); if(function_exists('iconv')) { if(is_array($str)) { foreach($str as $key => $val) { $tmp[$key] = iconv($from, $to."//IGNORE", $val); } return $tmp; } else { return iconv($from, $to."//IGNORE", $str); } } else if(function_exists('mb_convert_encoding')) { if(is_array($str)) { foreach($str as $key => $val) { $tmp[$key] = mb_convert_encoding($val, $to, $from); } return $tmp; } else { return mb_convert_encoding($str, $to, $from); } } else { require_once 'convert.func.php'; return dconvert($str, $to, $from); } } ?> <form action="./" method="get"> <input type="text" name="cat_name" value="<?php echo $cat_name?>" /> <input type="submit" value="提交" /><br /> </form> <?php echo $letters; ?>
pinyin.table
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
备注:新建text文件复制下面代码到文件,重命名文件名pinyin.table
PS:这里再为大家提供几款本站拼音与字母相关工具供大家参考:
在线中英文根据首字母排序工具:
http://tools.jb51.net/aideddesign/zh_paixu
在线汉字转换成拼音工具:
http://tools.jb51.net/transcoding/pinyin
在线中文汉字转拼音工具:
http://tools.jb51.net/transcoding/hanzi2pinyin
在线中文汉字拼音对照转换工具:
http://tools.jb51.net/transcoding/zh_pinyin
在线字母大小写转换工具:
http://tools.jb51.net/transcoding/upper
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP编码与转码操作技巧汇总》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php常用函数与技巧总结》及《PHP错误与异常处理方法总结》
希望本文所述对大家PHP程序设计有所帮助。