<?php
/**
*+------------------------------------------------------
* PHP kanji to Pinyin
*+------------------------------------------------------
* How to use:
* $py = new PinYin ();
* Echo $py->getallpy ("Output kanji all pinyin"); Shuchuhanzisuoyoupinyin
* Echo $py->getfirstpy ("Output Chinese pinyin"); Schzspy
*+------------------------------------------------------
*/
Class PinYin {
Private $pylist = 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, ' June ' =>-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
);
/**
*+---------------------------------------------------------------------------------
* Get all Pinyin
*+---------------------------------------------------------------------------------
* @return String
*+---------------------------------------------------------------------------------
*/
Public Function getallpy ($chinese, $delimiter = ", $length = 0, $charset = ' utf-8 ') {
if ($charset! = ' gb2312 ') $chinese = $this->_U2_UTF8_GB ($chinese);
$py = $this->zh_to_pys ($chinese, $delimiter);
if ($length) {
$py = substr ($py, 0, $length);
}
return $py;
}
/**
*+--------------------------------------------------------------------------------
* Get Pinyin Initials
*+--------------------------------------------------------------------------------
* @return String
*+--------------------------------------------------------------------------------
*/
Public Function getfirstpy ($chinese, $charset = ' utf-8 ') {
if ($charset! = ' gb2312 ') $chinese = $this->_U2_UTF8_GB ($chinese);
$result = ";
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. = substr ($this->zh_to_py ($p), 0, 1);
}
return $result;
}
Public Function _U2_UTF8_GB ($_c) {
$_string = ";
if ($_c < 0x80) $_string. = $_c;
ElseIf ($_c < 0x800)
{
$_string. = Chr (0xC0 | $_c>>6);
$_string. = Chr (0x80 | $_c & 0x3F);
}elseif ($_c < 0x10000) {
$_string. = Chr (0xE0 | $_c>>12);
$_string. = Chr (0x80 | $_c>>6 & 0x3F);
$_string. = Chr (0x80 | $_c & 0x3F);
} elseif ($_c < 0x200000) {
$_string. = Chr (0xF0 | $_c>>18);
$_string. = Chr (0x80 | $_c>>12 & 0x3F);
$_string. = Chr (0x80 | $_c>>6 & 0x3F);
$_string. = Chr (0x80 | $_c & 0x3F);
}
Return Iconv (' UTF-8 ', ' GB2312 ', $_string);
}
Private Function Zh_to_py ($num, $blank = ") {
if ($num >0 && $num <160) {
return Chr ($num);
} elseif ($num <-20319| | $num >-10247) {
return $blank;
} else {
foreach ($this->pylist as $py = + $code) {
if ($code > $num) break;
$result = $py;
}
return $result;
}
}
Private Function Zh_to_pys ($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->zh_to_py ($p);
if ($first) {
return $result [0];
}
}
Return implode ($delimiter, $result);
}
}
PHP Kanji to Pinyin