PHP实现将汉字转换为拼音及获取词语首字母的方法
2018-09-07 12:31
本文实例讲述了PHP实现将汉字转换为拼音及获取词语首字母的方法。分享给大家供大家参考,具体如下:
最近要开发将汉字转换为拼音和得到首字的功能记录下来哈子:呵呵~
class Pinyin{ private $_outEncoding = GB2312; public function getPinyin($str,$pix= ,$code = gb2312){ $_DataKey = aaianangaobabaibanbangbaobeibenbengbibianbiaobiebinbingbobucacaicancangcaocecengcha . chaichanchangchaochechenchengchichongchouchuchuaichuanchuangchuichunchuocicongcoucu . cuancuicuncuodadaidandangdaodedengdidiandiaodiedingdiudongdoududuanduidunduoeener . fafanfangfeifenfengfofoufugagaiganganggaogegeigengenggonggouguguaguaiguanguanggui . gunguohahaihanhanghaoheheihenhenghonghouhuhuahuaihuanhuanghuihunhuojijiajianjiang . jiaojiejinjingjiongjiujujuanjuejunkakaikankangkaokekenkengkongkoukukuakuaikuankuang . kuikunkuolalailanlanglaoleleilenglilialianliangliaolielinlingliulongloululvluanlue . lunluomamaimanmangmaomemeimenmengmimianmiaomieminmingmiumomoumunanainannangnaone . neinennengninianniangniaonieninningniunongnunvnuannuenuoooupapaipanpangpaopeipen . pengpipianpiaopiepinpingpopuqiqiaqianqiangqiaoqieqinqingqiongqiuququanquequnranrang . raorerenrengrirongroururuanruirunruosasaisansangsaosesensengshashaishanshangshao . sheshenshengshishoushushuashuaishuanshuangshuishunshuosisongsoususuansuisunsuotatai . tantangtaotetengtitiantiaotietingtongtoututuantuituntuowawaiwanwangweiwenwengwowu . xixiaxianxiangxiaoxiexinxingxiongxiuxuxuanxuexunyayanyangyaoyeyiyinyingyoyongyou . yuyuanyueyunzazaizanzangzaozezeizenzengzhazhaizhanzhangzhaozhezhenzhengzhizhong . zhouzhuzhuazhuaizhuanzhuangzhuizhunzhuozizongzouzuzuanzuizunzuo; $_DataValue = -20319-20317-20304-20295-20292-20283-20265-20257-20242-20230-20051-20036-20032-20026-20002-19990 . -19986-19982-19976-19805-19784-19775-19774-19763-19756-19751-19746-19741-19739-19728-19725 . -19715-19540-19531-19525-19515-19500-19484-19479-19467-19289-19288-19281-19275-19270-19263 . -19261-19249-19243-19242-19238-19235-19227-19224-19218-19212-19038-19023-19018-19006-19003 . -18996-18977-18961-18952-18783-18774-18773-18763-18756-18741-18735-18731-18722-18710-18697 . -18696-18526-18518-18501-18490-18478-18463-18448-18447-18446-18239-18237-18231-18220-18211 . -18201-18184-18183-18181-18012-17997-17988-17970-17964-17961-17950-17947-17931-17928-17922 . -17759-17752-17733-17730-17721-17703-17701-17697-17692-17683-17676-17496-17487-17482-17468 . -17454-17433-17427-17417-17202-17185-16983-16970-16942-16915-16733-16708-16706-16689-16664 . -16657-16647-16474-16470-16465-16459-16452-16448-16433-16429-16427-16423-16419-16412-16407 . -16403-16401-16393-16220-16216-16212-16205-16202-16187-16180-16171-16169-16158-16155-15959 . -15958-15944-15933-15920-15915-15903-15889-15878-15707-15701-15681-15667-15661-15659-15652 . -15640-15631-15625-15454-15448-15436-15435-15419-15416-15408-15394-15385-15377-15375-15369 . -15363-15362-15183-15180-15165-15158-15153-15150-15149-15144-15143-15141-15140-15139-15128 . -15121-15119-15117-15110-15109-14941-14937-14933-14930-14929-14928-14926-14922-14921-14914 . -14908-14902-14894-14889-14882-14873-14871-14857-14678-14674-14670-14668-14663-14654-14645 . -14630-14594-14429-14407-14399-14384-14379-14368-14355-14353-14345-14170-14159-14151-14149 . -14145-14140-14137-14135-14125-14123-14122-14112-14109-14099-14097-14094-14092-14090-14087 . -14083-13917-13914-13910-13907-13906-13905-13896-13894-13878-13870-13859-13847-13831-13658 . -13611-13601-13406-13404-13400-13398-13395-13391-13387-13383-13367-13359-13356-13343-13340 . -13329-13326-13318-13147-13138-13120-13107-13096-13095-13091-13076-13068-13063-13060-12888 . -12875-12871-12860-12858-12852-12849-12838-12831-12829-12812-12802-12607-12597-12594-12585 . -12556-12359-12346-12320-12300-12120-12099-12089-12074-12067-12058-12039-11867-11861-11847 . -11831-11798-11781-11604-11589-11536-11358-11340-11339-11324-11303-11097-11077-11067-11055 . -11052-11045-11041-11038-11024-11020-11019-11018-11014-10838-10832-10815-10800-10790-10780 . -10764-10587-10544-10533-10519-10331-10329-10328-10322-10315-10309-10307-10296-10281-10274 . -10270-10262-10260-10256-10254; $_TDataKey = explode ( , $_DataKey ); $_TDataValue = explode ( , $_DataValue ); $data = (PHP_VERSION >= 5.0) ? array_combine ( $_TDataKey, $_TDataValue ) : $this->_Array_Combine( $_TDataKey, $_TDataValue ); arsort ( $data ); reset ( $data ); $str = $this->safe_encoding ( $str ); $_Res = ; for($i = 0; $i < strlen ( $str ); $i ++) { $_P = ord ( substr ( $str, $i, 1 ) ); if ($_P > 160) { $_Q = ord ( substr ( $str, ++ $i, 1 ) ); $_P = $_P * 256 + $_Q - 65536; } $_Res .= $this->_Pinyin ( $_P, $data ).$pix; } return preg_replace ( /[^a-z0-9.$pix.]*/, , $_Res ); } private function _Pinyin($_Num, $_Data) { if ($_Num > 0 && $_Num < 160) return chr ( $_Num ); elseif ($_Num < - 20319 $_Num > - 10247) return ; else { foreach ( $_Data as $k => $v ) { if ($v <= $_Num) break; } return $k; } } public function getFirstChar($str=){ if( !$str ) return null; $fchar=ord($str{0}); if($fchar>=ord(A) and $fchar<=ord(z) )return strtoupper($str{0}); $s= $this->safe_encoding($str); $asc=ord($s{0})*256+ord($s{1})-65536; if($asc>=-20319 and $asc<=-20284)return A; if($asc>=-20283 and $asc<=-19776)return B; if($asc>=-19775 and $asc<=-19219)return C; if($asc>=-19218 and $asc<=-18711)return D; if($asc>=-18710 and $asc<=-18527)return E; if($asc>=-18526 and $asc<=-18240)return F; if($asc>=-18239 and $asc<=-17923)return G; if($asc>=-17922 and $asc<=-17418)return H; if($asc>=-17417 and $asc<=-16475)return J; if($asc>=-16474 and $asc<=-16213)return K; if($asc>=-16212 and $asc<=-15641)return L; if($asc>=-15640 and $asc<=-15166)return M; if($asc>=-15165 and $asc<=-14923)return N; if($asc>=-14922 and $asc<=-14915)return O; if($asc>=-14914 and $asc<=-14631)return P; if($asc>=-14630 and $asc<=-14150)return Q; if($asc>=-14149 and $asc<=-14091)return R; if($asc>=-14090 and $asc<=-13319)return S; if($asc>=-13318 and $asc<=-12839)return T; if($asc>=-12838 and $asc<=-12557)return W; if($asc>=-12556 and $asc<=-11848)return X; if($asc>=-11847 and $asc<=-11056)return Y; if($asc>=-11055 and $asc<=-10247)return Z; return null; } function safe_encoding($string) { $encoding=UTF-8; for($i=0;$i<strlen($string);$i++) { if(ord($string{$i})<128) continue; if((ord($string{$i})&224)==224) { //第一个字节判断通过 $char=$string{++$i}; if((ord($char)&128)==128) { //第二个字节判断通过 $char=$string{++$i}; if((ord($char)&128)==128) { $encoding=UTF-8; break; } } } if((ord($string{$i})&192)==192) { //第一个字节判断通过 $char=$string{++$i}; if((ord($char)&128)==128) { //第二个字节判断通过 $encoding=GB2312; break; } } } if(strtoupper($encoding)==strtoupper($this->_outEncoding)) return $string; else return iconv($encoding,$this->_outEncoding,$string); } private function _Array_Combine($_Arr1, $_Arr2){ for($i = 0; $i < count ( $_Arr1 ); $i ++) $_Res [$_Arr1 [$i]] = $_Arr2 [$i]; return $_Res; } }
测试代码如下:
$pinyin = new Pinyin(); echo $pinyin->getFirstChar(湖北武汉).<br/>; echo $pinyin->getPinyin(北上广).<br/>; echo $pinyin->getPinyin(火影).<br/>; echo $pinyin->getFirstChar(获得).<br/>; echo $pinyin->getFirstChar(TOM).<br/>;
运行结果:
H bei shang guang huo ying H T
PS:这里再为大家提供几款本站拼音与字母相关工具供大家参考:
在线中英文根据首字母排序工具:
在线汉字转换成拼音工具:
在线中文汉字转拼音工具:
在线中文汉字拼音对照转换工具:
在线字母大小写转换工具:
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP编码与转码操作技巧汇总》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php常用函数与技巧总结》及《PHP错误与异常处理方法总结》
希望本文所述对大家PHP程序设计有所帮助。