php汉字换转成拼音

简介:
Java代码   收藏代码
  1. <?php  
  2. /** 
  3.  * PHP 汉字转拼音 
  4.  * @author Jerryli(hzjerry@gmail.com) 
  5.  * @version V0.20140715 
  6.  * @package SPFW.core.lib.final 
  7.  * @global SEA_PHP_FW_VAR_ENV 
  8.  * @example 
  9.  *    echo CUtf8_PY::encode('阿里巴巴科技有限公司'); //编码为拼音首字母 
  10.  *    echo CUtf8_PY::encode('阿里巴巴科技有限公司', 'all'); //编码为全拼音 
  11.  */  
  12. class CUtf8_PY  
  13. {  
  14.     /** 
  15.      * 拼音字符转换图 
  16.      * @var array 
  17.      */  
  18.     private static $_aMaps = array(  
  19.         'a' => -20319'ai' => -20317'an' => -20304'ang' => -20295'ao' => -20292,  
  20.         'ba' => -20283'bai' => -20265'ban' => -20257'bang' => -20242'bao' => -20230'bei' => -20051'ben' => -20036'beng' => -20032'bi' => -20026'bian' => -20002'biao' => -19990'bie' => -19986'bin' => -19982'bing' => -19976'bo' => -19805'bu' => -19784,  
  21.         'ca' => -19775'cai' => -19774'can' => -19763'cang' => -19756'cao' => -19751'ce' => -19746'ceng' => -19741'cha' => -19739'chai' => -19728'chan' => -19725'chang' => -19715'chao' => -19540'che' => -19531'chen' => -19525'cheng' => -19515'chi' => -19500'chong' => -19484'chou' => -19479'chu' => -19467'chuai' => -19289'chuan' => -19288'chuang' => -19281'chui' => -19275'chun' => -19270'chuo' => -19263'ci' => -19261'cong' => -19249'cou' => -19243'cu' => -19242'cuan' => -19238'cui' => -19235'cun' => -19227'cuo' => -19224,  
  22.         'da' => -19218'dai' => -19212'dan' => -19038'dang' => -19023'dao' => -19018'de' => -19006'deng' => -19003'di' => -18996'dian' => -18977'diao' => -18961'die' => -18952'ding' => -18783'diu' => -18774'dong' => -18773'dou' => -18763'du' => -18756'duan' => -18741'dui' => -18735'dun' => -18731'duo' => -18722,  
  23.         'e' => -18710'en' => -18697'er' => -18696,  
  24.         'fa' => -18526'fan' => -18518'fang' => -18501'fei' => -18490'fen' => -18478'feng' => -18463'fo' => -18448'fou' => -18447'fu' => -18446,  
  25.         'ga' => -18239'gai' => -18237'gan' => -18231'gang' => -18220'gao' => -18211'ge' => -18201'gei' => -18184'gen' => -18183'geng' => -18181'gong' => -18012'gou' => -17997'gu' => -17988'gua' => -17970'guai' => -17964'guan' => -17961'guang' => -17950'gui' => -17947'gun' => -17931'guo' => -17928,  
  26.         'ha' => -17922'hai' => -17759'han' => -17752'hang' => -17733'hao' => -17730'he' => -17721'hei' => -17703'hen' => -17701'heng' => -17697'hong' => -17692'hou' => -17683'hu' => -17676'hua' => -17496'huai' => -17487'huan' => -17482'huang' => -17468'hui' => -17454'hun' => -17433'huo' => -17427,  
  27.         'ji' => -17417'jia' => -17202'jian' => -17185'jiang' => -16983'jiao' => -16970'jie' => -16942'jin' => -16915'jing' => -16733'jiong' => -16708'jiu' => -16706'ju' => -16689'juan' => -16664'jue' => -16657'jun' => -16647,  
  28.         'ka' => -16474'kai' => -16470'kan' => -16465'kang' => -16459'kao' => -16452'ke' => -16448'ken' => -16433'keng' => -16429'kong' => -16427'kou' => -16423'ku' => -16419'kua' => -16412'kuai' => -16407'kuan' => -16403'kuang' => -16401'kui' => -16393'kun' => -16220'kuo' => -16216,  
  29.         'la' => -16212'lai' => -16205'lan' => -16202'lang' => -16187'lao' => -16180'le' => -16171'lei' => -16169'leng' => -16158'li' => -16155'lia' => -15959'lian' => -15958'liang' => -15944'liao' => -15933'lie' => -15920'lin' => -15915'ling' => -15903'liu' => -15889'long' => -15878'lou' => -15707'lu' => -15701'lv' => -15681'luan' => -15667'lue' => -15661'lun' => -15659'luo' => -15652,  
  30.         'ma' => -15640'mai' => -15631'man' => -15625'mang' => -15454'mao' => -15448'me' => -15436'mei' => -15435'men' => -15419'meng' => -15416'mi' => -15408'mian' => -15394'miao' => -15385'mie' => -15377'min' => -15375'ming' => -15369'miu' => -15363'mo' => -15362'mou' => -15183'mu' => -15180,  
  31.         'na' => -15165'nai' => -15158'nan' => -15153'nang' => -15150'nao' => -15149'ne' => -15144'nei' => -15143'nen' => -15141'neng' => -15140'ni' => -15139'nian' => -15128'niang' => -15121'niao' => -15119'nie' => -15117'nin' => -15110'ning' => -15109'niu' => -14941'nong' => -14937'nu' => -14933'nv' => -14930'nuan' => -14929'nue' => -14928'nuo' => -14926,  
  32.         'o' => -14922'ou' => -14921,  
  33.         'pa' => -14914'pai' => -14908'pan' => -14902'pang' => -14894'pao' => -14889'pei' => -14882'pen' => -14873'peng' => -14871'pi' => -14857'pian' => -14678'piao' => -14674'pie' => -14670'pin' => -14668'ping' => -14663'po' => -14654'pu' => -14645,  
  34.         'qi' => -14630'qia' => -14594'qian' => -14429'qiang' => -14407'qiao' => -14399'qie' => -14384'qin' => -14379'qing' => -14368'qiong' => -14355'qiu' => -14353'qu' => -14345'quan' => -14170'que' => -14159'qun' => -14151,  
  35.         'ran' => -14149'rang' => -14145'rao' => -14140're' => -14137'ren' => -14135'reng' => -14125'ri' => -14123'rong' => -14122'rou' => -14112'ru' => -14109'ruan' => -14099'rui' => -14097'run' => -14094'ruo' => -14092,  
  36.         'sa' => -14090'sai' => -14087'san' => -14083'sang' => -13917'sao' => -13914'se' => -13910'sen' => -13907'seng' => -13906'sha' => -13905'shai' => -13896'shan' => -13894'shang' => -13878'shao' => -13870'she' => -13859'shen' => -13847'sheng' => -13831'shi' => -13658'shou' => -13611'shu' => -13601'shua' => -13406'shuai' => -13404'shuan' => -13400'shuang' => -13398'shui' => -13395'shun' => -13391'shuo' => -13387'si' => -13383'song' => -13367'sou' => -13359'su' => -13356'suan' => -13343'sui' => -13340'sun' => -13329'suo' => -13326,  
  37.         'ta' => -13318'tai' => -13147'tan' => -13138'tang' => -13120'tao' => -13107'te' => -13096'teng' => -13095'ti' => -13091'tian' => -13076'tiao' => -13068'tie' => -13063'ting' => -13060'tong' => -12888'tou' => -12875'tu' => -12871'tuan' => -12860'tui' => -12858'tun' => -12852'tuo' => -12849,  
  38.         'wa' => -12838'wai' => -12831'wan' => -12829'wang' => -12812'wei' => -12802'wen' => -12607'weng' => -12597'wo' => -12594'wu' => -12585,  
  39.         'xi' => -12556'xia' => -12359'xian' => -12346'xiang' => -12320'xiao' => -12300'xie' => -12120'xin' => -12099'xing' => -12089'xiong' => -12074'xiu' => -12067'xu' => -12058'xuan' => -12039'xue' => -11867'xun' => -11861,  
  40.         'ya' => -11847'yan' => -11831'yang' => -11798'yao' => -11781'ye' => -11604'yi' => -11589'yin' => -11536'ying' => -11358'yo' => -11340'yong' => -11339'you' => -11324'yu' => -11303'yuan' => -11097'yue' => -11077'yun' => -11067,  
  41.         'za' => -11055'zai' => -11052'zan' => -11045'zang' => -11041'zao' => -11038'ze' => -11024'zei' => -11020'zen' => -11019'zeng' => -11018'zha' => -11014'zhai' => -10838'zhan' => -10832'zhang' => -10815'zhao' => -10800'zhe' => -10790'zhen' => -10780'zheng' => -10764'zhi' => -10587'zhong' => -10544'zhou' => -10533'zhu' => -10519'zhua' => -10331'zhuai' => -10329'zhuan' => -10328'zhuang' => -10322'zhui' => -10315'zhun' => -10309'zhuo' => -10307'zi' => -10296'zong' => -10281'zou' => -10274'zu' => -10270'zuan' => -10262'zui' => -10260'zun' => -10256'zuo' => -10254  
  42.     );  
  43.   
  44.     /** 
  45.      * 将中文编码成拼音 
  46.      * @param string $utf8Data utf8字符集数据 
  47.      * @param string $sRetFormat 返回格式 [head:首字母|all:全拼音] 
  48.      * @return string 
  49.      */  
  50.     public static function encode($utf8Data, $sRetFormat = 'head')  
  51.     {  
  52.         $sGBK = iconv('UTF-8''GBK', $utf8Data);  
  53.         $aBuf = array();  
  54.         for ($i = 0, $iLoop = strlen($sGBK); $i < $iLoop; $i++) {  
  55.             $iChr = ord($sGBK{$i});  
  56.             if ($iChr > 160)  
  57.                 $iChr = ($iChr << 8) + ord($sGBK{++$i}) - 65536;  
  58.             if ('head' === $sRetFormat)  
  59.                 $aBuf[] = substr(self::zh2py($iChr), 01);  
  60.             else  
  61.                 $aBuf[] = self::zh2py($iChr);  
  62.         }  
  63.         if ('head' === $sRetFormat)  
  64.             return implode('', $aBuf);  
  65.         else  
  66.             return implode(' ', $aBuf);  
  67.     }  
  68.   
  69.     /** 
  70.      * 中文转换到拼音(每次处理一个字符) 
  71.      * @param number $iWORD 待处理字符双字节 
  72.      * @return string 拼音 
  73.      */  
  74.     private static function zh2py($iWORD)  
  75.     {  
  76.         if ($iWORD > 0 && $iWORD < 160) {  
  77.             return chr($iWORD);  
  78.         } elseif ($iWORD < -20319 || $iWORD > -10247) {  
  79.             return '';  
  80.         } else {  
  81.             foreach (self::$_aMaps as $py => $code) {  
  82.                 if ($code > $iWORD) break;  
  83.                 $result = $py;  
  84.             }  
  85.             return $result;  
  86.         }  
  87.     }  
  88. }  
  89. ?>  

优化了传统的拼音转换处理类的算法,专门针对UTF-8字符集进行处理。如果你使用GBK或GB2312字符集,只需要去掉iconv函数,直接赋值,不需要转换就行。

https://github.com/overtrue/pinyin

//多音字
// 了
Pinyin::trans('了然'); // liǎo rán
Pinyin::trans('来了'); // lái le
相关文章
PHP:overtrue/pinyin 中文转拼音工具
PHP:overtrue/pinyin 中文转拼音工具
310 0
|
PHP Windows
PHP截取汉字乱码问题解决方法之mb_substr函数的应用
PHP截取汉字乱码问题解决方法之mb_substr函数的应用
1415 0
|
PHP Serverless
php中处理汉字字符串长度:strlen和mb_strlen
php中处理汉字字符串长度:strlen和mb_strlen
1921 0
|
PHP
***PHP各种编码的汉字字符串截取
虽然PHP有现成的截取字符串函数substr(),但是这个函数不能对汉字字符串进行截取,要实现这种效果还需要我们自己去编写相应的函数。汉字有多种编码,比如GB2312,UTF-8等,汉字字符串的截取需要区分这种汉字编码,下面是给出的几个解决方案。
824 0