PHP基于自定义函数实现的汉字转拼音功能实例

这篇文章主要介绍了PHP基于自定义函数实现的汉字转拼音功能,涉及php表单及字符串编码转换、遍历等相关操作技巧,需要的朋友可以参考下。

本文实例讲述了PHP基于自定义函数实现的汉字转拼音功能,分享给大家供大家参考,具体如下:

整个过程用到了pinyin.table文件。

pinyin.php

  1. <?php
  2. header("Content-Type:text/html;charset=utf-8");
  3. $letters = "";
  4. if ($_GET) {
  5. $cat_name = $_GET["cat_name"];
  6. $catname = convert($cat_name);
  7. $letters = get_letter($catname, false);
  8. }
  9. function get_letter($catname, $letter = true) {
  10. return $letter ? strtolower(substr(gb2py($catname), 0, 1)) : str_replace(' ', '', gb2py($catname));
  11. }
  12. function gb2py($text, $exp = '') {
  13. if(!$text) return '';
  14. $data = array();
  15. $tmp = @file('pinyin.table'); // 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。
  16. if(!$tmp) return '';
  17. $tmps = count($tmp);
  18. for($i = 0; $i < $tmps; $i++) {
  19. $tmp1 = explode(" ", $tmp[$i]);
  20. $data[$i]=array($tmp1[0], $tmp1[1]);
  21. }
  22. $r = array();
  23. $k = 0;
  24. $textlen = strlen($text);
  25. for($i = 0; $i < $textlen; $i++) {
  26. $p = ord(substr($text, $i, 1));
  27. if($p > 160) {
  28. $q = ord(substr($text, ++$i, 1));
  29. $p = $p*256+$q-65536;
  30. }
  31. if($p > 0 && $p < 160) {
  32. $r[$k] = chr($p);
  33. } elseif($p< -20319 || $p > -10247) {
  34. $r[$k] = '';
  35. } else {
  36. for($j = $tmps-1; $j >= 0; $j--) {
  37. if($data[$j][1]<=$p) break;
  38. }
  39. $r[$k] = $data[$j][0];
  40. }
  41. $k++;
  42. }
  43. return implode($exp, $r);
  44. }
  45. function convert($str, $from = 'utf-8', $to = 'gb2312') {
  46. if(!$str) return '';
  47. $from = strtolower($from);
  48. $to = strtolower($to);
  49. if($from == $to) return $str;
  50. $from = str_replace('gbk', 'gb2312', $from);
  51. $to = str_replace('gbk', 'gb2312', $to);
  52. $from = str_replace('utf8', 'utf-8', $from);
  53. $to = str_replace('utf8', 'utf-8', $to);
  54. if($from == $to) return $str;
  55. $tmp = array();
  56. if(function_exists('iconv')) {
  57. if(is_array($str)) {
  58. foreach($str as $key => $val) {
  59. $tmp[$key] = iconv($from, $to."//IGNORE", $val);
  60. }
  61. return $tmp;
  62. } else {
  63. return iconv($from, $to."//IGNORE", $str);
  64. }
  65. } else if(function_exists('mb_convert_encoding')) {
  66. if(is_array($str)) {
  67. foreach($str as $key => $val) {
  68. $tmp[$key] = mb_convert_encoding($val, $to, $from);
  69. }
  70. return $tmp;
  71. } else {
  72. return mb_convert_encoding($str, $to, $from);
  73. }
  74. } else {
  75. require_once 'convert.func.php';
  76. return dconvert($str, $to, $from);
  77. }
  78. }
  79. ?>
  80. <form action="./" method="get">
  81. <input type="text" name="cat_name" value="<?php echo $cat_name?>" />
  82. <input type="submit" value="提交" /><br />
  83. </form>
  84. <?php
  85. echo $letters;
  86. ?>

pinyin.table

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

备注:新建text文件复制下面代码到文件,重命名文件名pinyin.table