当前位置:首页 > PHP教程 > php函数 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-08-11 13:29:56 浏览: 评论:0 

这篇文章主要介绍了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(!$textreturn ''
  14.  $data = array(); 
  15.  $tmp = @file('pinyin.table'); // 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。 
  16.  if(!$tmpreturn ''
  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]<=$pbreak
  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(!$strreturn ''
  47.  $from = strtolower($from); 
  48.  $to = strtolower($to); 
  49.  if($from == $toreturn $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 == $toreturn $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

Tags: PHP自定义函数 PHP汉字转拼音

分享到: