PHP生成中文拼音

<?php
class ChineseSpell {
 /**
  * @var array $chineseSpellList 拼音编码对应表
  * @access private
  */
 private $chineseSpellList = array(
    ‘a’=>-20319,
    ‘ai’=>-20317,
    ‘an’=>-20304,
    ‘ang’=>-20295,
    ‘ao’=>-20292,
    ‘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,
    ‘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,
    ‘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,
    ‘e’=>-18710,
    ‘en’=>-18697,
    ‘er’=>-18696,
    ‘fa’=>-18526,
    ‘fan’=>-18518,
    ‘fang’=>-18501,
    ‘fei’=>-18490,
    ‘fen’=>-18478,
    ‘feng’=>-18463,
    ‘fo’=>-18448,
    ‘fou’=>-18447,
    ‘fu’=>-18446,
    ‘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,
    ‘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,
    ‘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,
    ‘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,
    ‘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,
    ‘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,
    ‘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,
    ‘o’=>-14922,
    ‘ou’=>-14921,
    ‘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,
    ‘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,
    ‘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,
    ‘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,
    ‘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,
    ‘wa’=>-12838,
    ‘wai’=>-12831,
    ‘wan’=>-12829,
    ‘wang’=>-12812,
    ‘wei’=>-12802,
    ‘wen’=>-12607,
    ‘weng’=>-12597,
    ‘wo’=>-12594,
    ‘wu’=>-12585,
    ‘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,
    ‘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,
    ‘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
    );
 
 /**
  * 取汉字所有拼音
  * @param string $chinese 要转换的汉字
  * @param string $delimiter 分隔符
  * @param int $length 返回的长度
  * @return string
  */
 public function getFullSpell($chinese, $delimiter = ‘ ‘, $length = 0) {
  $spell = $this->getChineseSpells($chinese, $delimiter);
  if ($length) {
   $spell = substr($spell, 0, $length);
  }
  return $spell;
 }
 
 /**
  * 取汉字第一个拼音
  * @param string $chinese 要转换的汉字
  * @param int $length 返回的长度
  * @return string
  */
 public function getFirstSpell($chinese, $length = 0) {
  $spell = $this->getChineseSpells($chinese, ‘ ‘, 1);
  if ($length) {
   $spell = substr($spell, 0, $length);
  }
  return $spell;
 }
 /**
  * 取一个汉字码对应的拼音
  * @param int $num 汉字码
  * @param string $blank 空白字符
  * @return string
  */
 private function getChineseSpell ($num, $blank = ”) {
  if ( $num>0 && $num<160 ) {
   return chr($num);
  } elseif ($num<-20319||$num>-10247) {
   return $blank;
  } else {
   foreach ($this->chineseSpellList as $spell => $code) {
    if ($code > $num) break;
    $result = $spell;
   }
   return $result;
  }
 }
 /**
  * 取汉字拼音
  * @param string $chinese 要转换的汉字
  * @param string $delimiter 分隔符
  * @param int $first 是否只返回第一个
  * @return string
  */
 private function getChineseSpells($chinese, $delimiter = ‘ ‘, $first=0)
 {
  $result = array();
  for ($i=0; $i<strlen($chinese); $i++) {
   $p = ord(substr($chinese,$i,1));
   if ($p>160) {
    $q = ord(substr($chinese,++$i,1));
    $p = $p*256 + $q – 65536;
   }
   $result[] = $this->getChineseSpell($p);
   if ($first) {
    return $result[0];
   }
  }
  return implode($delimiter, $result);
 }
}
?>

0 0 投票数
文章评分
订阅评论
提醒
guest

2 评论
最旧
最新 最多投票
内联反馈
查看所有评论
duolab
2009年4月5日 16:19

Parse error: parse error, expecting `’)” in F:\php\pinyin.php on line 413
刚才试了试,好像413行有点问题,我对php不懂,不知道哪错了

countmeon
2009年4月7日 15:06

以前的时候玩过,不过这次是搬过来的,没有检查,看你的错误提示是缺少“)”这个吧。

2
0
希望看到您的想法,请您发表评论x