You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
7.1 KiB
59 lines
7.1 KiB
<?php
|
|
class Tool_Pinyin {
|
|
static $map = array('zuo'=>-10254,'zun'=>-10256,'zui'=>-10260,'zuan'=>-10262,'zu'=>-10270,'zou'=>-10274,'zong'=>-10281,'zi'=>-10296,'zhuo'=>-10307,'zhun'=>-10309,'zhui'=>-10315,'zhuang'=>-10322,'zhuan'=>-10328,'zhuai'=>-10329,'zhua'=>-10331,'zhu'=>-10519,'zhou'=>-10533,'zhong'=>-10544,'zhi'=>-10587,'zheng'=>-10764,'zhen'=>-10780,'zhe'=>-10790,'zhao'=>-10800,'zhang'=>-10815,'zhan'=>-10832,'zhai'=>-10838,'zha'=>-11014,'zeng'=>-11018,'zen'=>-11019,'zei'=>-11020,'ze'=>-11024,'zao'=>-11038,'zang'=>-11041,'zan'=>-11045,'zai'=>-11052,'za'=>-11055,'yun'=>-11067,'yue'=>-11077,'yuan'=>-11097,'yu'=>-11303,'you'=>-11324,'yong'=>-11339,'yo'=>-11340,'ying'=>-11358,'yin'=>-11536,'yi'=>-11589,'ye'=>-11604,'yao'=>-11781,'yang'=>-11798,'yan'=>-11831,'ya'=>-11847,'xun'=>-11861,'xue'=>-11867,'xuan'=>-12039,'xu'=>-12058,'xiu'=>-12067,'xiong'=>-12074,'xing'=>-12089,'xin'=>-12099,'xie'=>-12120,'xiao'=>-12300,'xiang'=>-12320,'xian'=>-12346,'xia'=>-12359,'xi'=>-12556,'wu'=>-12585,'wo'=>-12594,'weng'=>-12597,'wen'=>-12607,'wei'=>-12802,'wang'=>-12812,'wan'=>-12829,'wai'=>-12831,'wa'=>-12838,'tuo'=>-12849,'tun'=>-12852,'tui'=>-12858,'tuan'=>-12860,'tu'=>-12871,'tou'=>-12875,'tong'=>-12888,'ting'=>-13060,'tie'=>-13063,'tiao'=>-13068,'tian'=>-13076,'ti'=>-13091,'teng'=>-13095,'te'=>-13096,'tao'=>-13107,'tang'=>-13120,'tan'=>-13138,'tai'=>-13147,'ta'=>-13318,'suo'=>-13326,'sun'=>-13329,'sui'=>-13340,'suan'=>-13343,'su'=>-13356,'sou'=>-13359,'song'=>-13367,'si'=>-13383,'shuo'=>-13387,'shun'=>-13391,'shui'=>-13395,'shuang'=>-13398,'shuan'=>-13400,'shuai'=>-13404,'shua'=>-13406,'shu'=>-13601,'shou'=>-13611,'shi'=>-13658,'sheng'=>-13831,'shen'=>-13847,'she'=>-13859,'shao'=>-13870,'shang'=>-13878,'shan'=>-13894,'shai'=>-13896,'sha'=>-13905,'seng'=>-13906,'sen'=>-13907,'se'=>-13910,'sao'=>-13914,'sang'=>-13917,'san'=>-14083,'sai'=>-14087,'sa'=>-14090,'ruo'=>-14092,'run'=>-14094,'rui'=>-14097,'ruan'=>-14099,'ru'=>-14109,'rou'=>-14112,'rong'=>-14122,'ri'=>-14123,'reng'=>-14125,'ren'=>-14135,'re'=>-14137,'rao'=>-14140,'rang'=>-14145,'ran'=>-14149,'qun'=>-14151,'que'=>-14159,'quan'=>-14170,'qu'=>-14345,'qiu'=>-14353,'qiong'=>-14355,'qing'=>-14368,'qin'=>-14379,'qie'=>-14384,'qiao'=>-14399,'qiang'=>-14407,'qian'=>-14429,'qia'=>-14594,'qi'=>-14630,'pu'=>-14645,'po'=>-14654,'ping'=>-14663,'pin'=>-14668,'pie'=>-14670,'piao'=>-14674,'pian'=>-14678,'pi'=>-14857,'peng'=>-14871,'pen'=>-14873,'pei'=>-14882,'pao'=>-14889,'pang'=>-14894,'pan'=>-14902,'pai'=>-14908,'pa'=>-14914,'ou'=>-14921,'o'=>-14922,'nuo'=>-14926,'nue'=>-14928,'nuan'=>-14929,'nv'=>-14930,'nu'=>-14933,'nong'=>-14937,'niu'=>-14941,'ning'=>-15109,'nin'=>-15110,'nie'=>-15117,'niao'=>-15119,'niang'=>-15121,'nian'=>-15128,'ni'=>-15139,'neng'=>-15140,'nen'=>-15141,'nei'=>-15143,'ne'=>-15144,'nao'=>-15149,'nang'=>-15150,'nan'=>-15153,'nai'=>-15158,'na'=>-15165,'mu'=>-15180,'mou'=>-15183,'mo'=>-15362,'miu'=>-15363,'ming'=>-15369,'min'=>-15375,'mie'=>-15377,'miao'=>-15385,'mian'=>-15394,'mi'=>-15408,'meng'=>-15416,'men'=>-15419,'mei'=>-15435,'me'=>-15436,'mao'=>-15448,'mang'=>-15454,'man'=>-15625,'mai'=>-15631,'ma'=>-15640,'luo'=>-15652,'lun'=>-15659,'lue'=>-15661,'luan'=>-15667,'lv'=>-15681,'lu'=>-15701,'lou'=>-15707,'long'=>-15878,'liu'=>-15889,'ling'=>-15903,'lin'=>-15915,'lie'=>-15920,'liao'=>-15933,'liang'=>-15944,'lian'=>-15958,'lia'=>-15959,'li'=>-16155,'leng'=>-16158,'lei'=>-16169,'le'=>-16171,'lao'=>-16180,'lang'=>-16187,'lan'=>-16202,'lai'=>-16205,'la'=>-16212,'kuo'=>-16216,'kun'=>-16220,'kui'=>-16393,'kuang'=>-16401,'kuan'=>-16403,'kuai'=>-16407,'kua'=>-16412,'ku'=>-16419,'kou'=>-16423,'kong'=>-16427,'keng'=>-16429,'ken'=>-16433,'ke'=>-16448,'kao'=>-16452,'kang'=>-16459,'kan'=>-16465,'kai'=>-16470,'ka'=>-16474,'jun'=>-16647,'jue'=>-16657,'juan'=>-16664,'ju'=>-16689,'jiu'=>-16706,'jiong'=>-16708,'jing'=>-16733,'jin'=>-16915,'jie'=>-16942,'jiao'=>-16970,'jiang'=>-16983,'jian'=>-17185,'jia'=>-17202,'ji'=>-17417,'huo'=>-17427,'hun'=>-17433,'hui'=>-17454,'huang'=>-17468,'huan'=>-17482,'huai'=>-17487,'hua'=>-17496,'hu'=>-17676,'hou'=>-17683,'hong'=>-17692,'heng'=>-17697,'hen'=>-17701,'hei'=>-17703,'he'=>-17721,'hao'=>-17730,'hang'=>-17733,'han'=>-17752,'hai'=>-17759,'ha'=>-17922,'guo'=>-17928,'gun'=>-17931,'gui'=>-17947,'guang'=>-17950,'guan'=>-17961,'guai'=>-17964,'gua'=>-17970,'gu'=>-17988,'gou'=>-17997,'gong'=>-18012,'geng'=>-18181,'gen'=>-18183,'gei'=>-18184,'ge'=>-18201,'gao'=>-18211,'gang'=>-18220,'gan'=>-18231,'gai'=>-18237,'ga'=>-18239,'fu'=>-18446,'fou'=>-18447,'fo'=>-18448,'feng'=>-18463,'fen'=>-18478,'fei'=>-18490,'fang'=>-18501,'fan'=>-18518,'fa'=>-18526,'er'=>-18696,'en'=>-18697,'e'=>-18710,'duo'=>-18722,'dun'=>-18731,'dui'=>-18735,'duan'=>-18741,'du'=>-18756,'dou'=>-18763,'dong'=>-18773,'diu'=>-18774,'ding'=>-18783,'die'=>-18952,'diao'=>-18961,'dian'=>-18977,'di'=>-18996,'deng'=>-19003,'de'=>-19006,'dao'=>-19018,'dang'=>-19023,'dan'=>-19038,'dai'=>-19212,'da'=>-19218,'cuo'=>-19224,'cun'=>-19227,'cui'=>-19235,'cuan'=>-19238,'cu'=>-19242,'cou'=>-19243,'cong'=>-19249,'ci'=>-19261,'chuo'=>-19263,'chun'=>-19270,'chui'=>-19275,'chuang'=>-19281,'chuan'=>-19288,'chuai'=>-19289,'chu'=>-19467,'chou'=>-19479,'chong'=>-19484,'chi'=>-19500,'cheng'=>-19515,'chen'=>-19525,'che'=>-19531,'chao'=>-19540,'chang'=>-19715,'chan'=>-19725,'chai'=>-19728,'cha'=>-19739,'ceng'=>-19741,'ce'=>-19746,'cao'=>-19751,'cang'=>-19756,'can'=>-19763,'cai'=>-19774,'ca'=>-19775,'bu'=>-19784,'bo'=>-19805,'bing'=>-19976,'bin'=>-19982,'bie'=>-19986,'biao'=>-19990,'bian'=>-20002,'bi'=>-20026,'beng'=>-20032,'ben'=>-20036,'bei'=>-20051,'bao'=>-20230,'bang'=>-20242,'ban'=>-20257,'bai'=>-20265,'ba'=>-20283,'ao'=>-20292,'ang'=>-20295,'an'=>-20304,'ai'=>-20317,'a'=>-20319);
|
|
static function get($pStr, $pCharset = 'UTF-8') {
|
|
if (!$pStr) return '';
|
|
$pStr = strtolower($pStr);
|
|
if ($pCharset != 'gb2312') $pStr = Tool_Pinyin::str2gbk($pStr, $pCharset);
|
|
$tPinyin = '';
|
|
for ($i = 0; $i < strlen($pStr); $i++) {
|
|
if (160 < ($tAscii = ord(substr($pStr, $i, 1)))) {
|
|
$tAscii = $tAscii * 256 + ord(substr($pStr, ++$i, 1)) - 65536;
|
|
}
|
|
$tPinyin .= Tool_Pinyin::ascii2py($tAscii);
|
|
}
|
|
return preg_replace("/[^a-z0-9]*/", '', $tPinyin);
|
|
}
|
|
|
|
/**
|
|
* ascii 转字符
|
|
* @param str $pAscii
|
|
* @return string
|
|
*/
|
|
static function ascii2py($pAscii) {
|
|
if ($pAscii > 0 && $pAscii < 160) return chr($pAscii);
|
|
if ($pAscii < -20319 || $pAscii > -10247) return '';
|
|
foreach (Tool_Pinyin::$map as $k => $v) if ($v <= $pAscii) break;
|
|
return $k;
|
|
}
|
|
|
|
/**
|
|
* 转编码为gb2312
|
|
* @param string $pStr 字符串
|
|
* @param string $pCharset 字符串编码
|
|
*
|
|
* @return string
|
|
*/
|
|
static function str2gbk($pStr, $pCharset) {
|
|
$tStr = '';
|
|
if ($pStr < 0x80) {
|
|
$tStr .= $pStr;
|
|
}
|
|
elseif ($pStr < 0x800) {
|
|
$tStr .= chr(0xC0 | $pStr >> 6);
|
|
$tStr .= chr(0x80 | $pStr & 0x3F);
|
|
}
|
|
elseif ($pStr < 0x10000) {
|
|
$tStr .= chr(0xE0 | $pStr >> 12);
|
|
$tStr .= chr(0x80 | $pStr >> 6 & 0x3F);
|
|
$tStr .= chr(0x80 | $pStr & 0x3F);
|
|
}
|
|
elseif ($pStr < 0x200000) {
|
|
$tStr .= chr(0xF0 | $pStr >> 18);
|
|
$tStr .= chr(0x80 | $pStr >> 12 & 0x3F);
|
|
$tStr .= chr(0x80 | $pStr >> 6 & 0x3F);
|
|
$tStr .= chr(0x80 | $pStr & 0x3F);
|
|
}
|
|
return iconv($pCharset, 'GB2312', $tStr);
|
|
}
|
|
} |