-
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
出处:http://www.phpfensi.com/php/20210811/17584.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式