Pinyin.class.php 14 KB

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