本文整理了PHP汉字拼音转换和公历农历转换两个功能类文件,非常实用。比如我们查找通讯录可以通过联系人姓名的拼音首字母来查询,可以通过首字母来导航大数据量,可以通过转换拼音来做网站优化等。公农历转化一般用在日历日程安排的项目中,方便农历的节日提醒等等。
1、PHP汉字转拼音
Pinyin.class.php类文件可以将大多数汉字转换成汉语拼音,当然也有个别生僻字不能转换,如果你想转换所有的汉字拼音的话,可能需要再配合一个汉字字库来实现,使用该类文件就基本能满足你的项目需求了。用法:
require_once(\"Pinyin.class.php\");
$pinyin = new Pinyin();
$str = \'好好学习天天向上\';
echo $pinyin->strtopin($str);
执行后输出:hao hao xue xi tian tian xiang shang。
如果只是想输出汉字首字母则使用:
echo $pinyin->strtopin($str,1);
执行后输出:hhxxttxs。
Pinyin.class.php 源码:
<?php
class Pinyin{
private $d = array (
array (
\"a\",
-20319
),
array (
\"ai\",
-20317
),
array (
\"an\",
-20304
),
array (
\"ang\",
-20295
),
array (
\"ao\",
-20292
),
array (
\"ba\",
-20283
),
array (
\"bai\",
-20265
),
array (
\"ban\",
-20257
),
array (
\"bang\",
-20242
),
array (
\"bao\",
-20230
),
array (
\"bei\",
-20051
),
array (
\"ben\",
-20036
),
array (
\"beng\",
-20032
),
array (
\"bi\",
-20026
),
array (
\"bian\",
-20002
),
array (
\"biao\",
-19990
),
array (
\"bie\",
-19986
),
array (
\"bin\",
-19982
),
array (
\"bing\",
-19976
),
array (
\"bo\",
-19805
),
array (
\"bu\",
-19784
),
array (
\"ca\",
-19775
),
array (
\"cai\",
-19774
),
array (
\"can\",
-19763
),
array (
\"cang\",
-19756
),
array (
\"cao\",
-19751
),
array (
\"ce\",
-19746
),
array (
\"ceng\",
-19741
),
array (
\"cha\",
-19739
),
array (
\"chai\",
-19728
),
array (
\"chan\",
-19725
),
array (
\"chang\",
-19715
),
array (
\"chao\",
-19540
),
array (
\"che\",
-19531
),
array (
\"chen\",
-19525
),
array (
\"cheng\",
-19515
),
array (
\"chi\",
-19500
),
array (
\"chong\",
-19484
),
array (
\"chou\",
-19479
),
array (
\"chu\",
-19467
),
array (
\"chuai\",
-19289
),
array (
\"chuan\",
-19288
),
array (
\"chuang\",
-19281
),
array (
\"chui\",
-19275
),
array (
\"chun\",
-19270
),
array (
\"chuo\",
-19263
),
array (
\"ci\",
-19261
),
array (
\"cong\",
-19249
),
array (
\"cou\",
-19243
),
array (
\"cu\",
-19242
),
array (
\"cuan\",
-19238
),
array (
\"cui\",
-19235
),
array (
\"cun\",
-19227
),
array (
\"cuo\",
-19224
),
array (
\"da\",
-19218
),
array (
\"dai\",
-19212
),
array (
\"dan\",
-19038
),
array (
\"dang\",
-19023
),
array (
\"dao\",
-19018
),
array (
\"de\",
-19006
),
array (
\"deng\",
-19003
),
array (
\"di\",
-18996
),
array (
\"dian\",
-18977
),
array (
\"diao\",
-18961
),
array (
\"die\",
-18952
),
array (
\"ding\",
-18783
),
array (
\"diu\",
-18774
),
array (
\"dong\",
-18773
),
array (
\"dou\",
-18763
),
array (
\"du\",
-18756
),
array (
\"duan\",
-18741
),
array (
\"dui\",
-18735
),
array (
\"dun\",
-18731
),
array (
\"duo\",
-18722
),
array (
\"e\",
-18710
),
array (
\"en\",
-18697
),
array (
\"er\",
-18696
),
array (
\"fa\",
-18526
),
array (
\"fan\",
-18518
),
array (
\"fang\",
-18501
),
array (
\"fei\",
-18490
),
array (
\"fen\",
-18478
),
array (
\"feng\",
-18463
),
array (
\"fo\",
-18448
),
array (
\"fou\",
-18447
),
array (
\"fu\",
-18446
),
array (
\"ga\",
-18239
),
array (
\"gai\",
-18237
),
array (
\"gan\",
-18231
),
array (
\"gang\",
-18220
),
array (
\"gao\",
-18211
),
array (
\"ge\",
-18201
),
array (
\"gei\",
-18184
),
array (
\"gen\",
-18183
),
array (
\"geng\",
-18181
),
array (
\"gong\",
-18012
),
array (
\"gou\",
-17997
),
array (
\"gu\",
-17988
),
array (
\"gua\",
-17970
),
array (
\"guai\",
-17964
),
array (
\"guan\",
-17961
),
array (
\"guang\",
-17950
),
array (
\"gui\",
-17947
),
array (
\"gun\",
-17931
),
array (
\"guo\",
-17928
),
array (
\"ha\",
-17922
),
array (
\"hai\",
-17759
),
array (
\"han\",
-17752
),
array (
\"hang\",
-17733
),
array (
\"hao\",
-17730
),
array (
\"he\",
-17721
),
array (
\"hei\",
-17703
),
array (
\"hen\",
-17701
),
array (
\"heng\",
-17697
),
array (
\"hong\",
-17692
),
array (
\"hou\",
-17683
),
array (
\"hu\",
-17676
),
array (
\"hua\",
-17496
),
array (
\"huai\",
-17487
),
array (
\"huan\",
-17482
),
array (
\"huang\",
-17468
),
array (
\"hui\",
-17454
),
array (
\"hun\",
-17433
),
array (
\"huo\",
-17427
),
array (
\"ji\",
-17417
),
array (
\"jia\",
-17202
),
array (
\"jian\",
-17185
),
array (
\"jiang\",
-16983
),
array (
\"jiao\",
-16970
),
array (
\"jie\",
-16942
),
array (
\"jin\",
-16915
),
array (
\"jing\",
-16733
),
array (
\"jiong\",
-16708
),
array (
\"jiu\",
-16706
),
array (
\"ju\",
-16689
),
array (
\"juan\",
-16664
),
array (
\"jue\",
-16657
),
array (
\"jun\",
-16647
),
array (
\"ka\",
-16474
),
array (
\"kai\",
-16470
),
array (
\"kan\",
-16465
),
array (
\"kang\",
-16459
),
array (
\"kao\",
-16452
),
array (
\"ke\",
-16448
),
array (
\"ken\",
-16433
),
array (
\"keng\",
-16429
),
array (
\"kong\",
-16427
),
array (
\"kou\",
-16423
),
array (
\"ku\",
-16419
),
array (
\"kua\",
-16412
),
array (
\"kuai\",
-16407
),
array (
\"kuan\",
-16403
),
array (
\"kuang\",
-16401
),
array (
\"kui\",
-16393
),
array (
\"kun\",
-16220
),
array (
\"kuo\",
-16216
),
array (
\"la\",
-16212
),
array (
\"lai\",
-16205
),
array (
\"lan\",
-16202
),
array (
\"lang\",
-16187
),
array (
\"lao\",
-16180
),
array (
\"le\",
-16171
),
array (
\"lei\",
-16169
),
array (
\"leng\",
-16158
),
array (
\"li\",
-16155
),
array (
\"lia\",
-15959
),
array (
\"lian\",
-15958
),
array (
\"liang\",
-15944
),
array (
\"liao\",
-15933
),
array (
\"lie\",
-15920
),
array (
\"lin\",
-15915
),
array (
\"ling\",
-15903
),
array (
\"liu\",
-15889
),
array (
\"long\",
-15878
),
array (
\"lou\",
-15707
),
array (
\"lu\",
-15701
),
array (
\"lv\",
-15681
),
array (
\"luan\",
-15667
),
array (
\"lue\",
-15661
),
array (
\"lun\",
-15659
),
array (
\"luo\",
-15652
),
array (
\"ma\",
-15640
),
array (
\"mai\",
-15631
),
array (
\"man\",
-15625
),
array (
\"mang\",
-15454
),
array (
\"mao\",
-15448
),
array (
\"me\",
-15436
),
array (
\"mei\",
-15435
),
array (
\"men\",
-15419
),
array (
\"meng\",
-15416
),
array (
\"mi\",
-15408
),
array (
\"mian\",
-15394
),
array (
\"miao\",
-15385
),
array (
\"mie\",
-15377
),
array (
\"min\",
-15375
),
array (
\"ming\",
-15369
),
array (
\"miu\",
-15363
),
array (
\"mo\",
-15362
),
array (
\"mou\",
-15183
),
array (
\"mu\",
-15180
),
array (
\"na\",
-15165
),
array (
\"nai\",
-15158
),
array (
\"nan\",
-15153
),
array (
\"nang\",
-15150
),
array (
\"nao\",
-15149
),
array (
\"ne\",
-15144
),
array (
\"nei\",
-15143
),
array (
\"nen\",
-15141
),
array (
\"neng\",
-15140
),
array (
\"ni\",
-15139
),
array (
\"nian\",
-15128
),
array (
\"niang\",
-15121
),
array (
\"niao\",
-15119
),
array (
\"nie\",
-15117
),
array (
\"nin\",
-15110
),
array (
\"ning\",
-15109
),
array (
\"niu\",
-14941
),
array (
\"nong\",
-14937
),
array (
\"nu\",
-14933
),
array (
\"nv\",
-14930
),
array (
\"nuan\",
-14929
),
array (
\"nue\",
-14928
),
array (
\"nuo\",
-14926
),
array (
\"o\",
-14922
),
array (
\"ou\",
-14921
),
array (
\"pa\",
-14914
),
array (
\"pai\",
-14908
),
array (
\"pan\",
-14902
),
array (
\"pang\",
-14894
),
array (
\"pao\",
-14889
),
array (
\"pei\",
-14882
),
array (
\"pen\",
-14873
),
array (
\"peng\",
-14871
),
array (
\"pi\",
-14857
),
array (
\"pian\",
-14678
),
array (
\"piao\",
-14674
),
array (
\"pie\",
-14670
),
array (
\"pin\",
-14668
),
array (
\"ping\",
-14663
),
array (
\"po\",
-14654
),
array (
\"pu\",
-14645
),
array (
\"qi\",
-14630
),
array (
\"qia\",
-14594
),
array (
\"qian\",
-14429
),
array (
\"qiang\",
-14407
),
array (
\"qiao\",
-14399
),
array (
\"qie\",
-14384
),
array (
\"qin\",
-14379
),
array (
\"qing\",
-14368
),
array (
\"qiong\",
-14355
),
array (
\"qiu\",
-14353
),
array (
\"qu\",
-14345
),
array (
\"quan\",
-14170
),
array (
\"que\",
-14159
),
array (
\"qun\",
-14151
),
array (
\"ran\",
-14149
),
array (
\"rang\",
-14145
),
array (
\"rao\",
-14140
),
array (
\"re\",
-14137
),
array (
\"ren\",
-14135
),
array (
\"reng\",
-14125
),
array (
\"ri\",
-14123
),
array (
\"rong\",
-14122
),
array (
\"rou\",
-14112
),
array (
\"ru\",
-14109
),
array (
\"ruan\",
-14099
),
array (
\"rui\",
-14097
),
array (
\"run\",
-14094
),
array (
\"ruo\",
-14092
),
array (
\"sa\",
-14090
),
array (
\"sai\",
-14087
),
array (
\"san\",
-14083
),
array (
\"sang\",
-13917
),
array (
\"sao\",
-13914
),
array (
\"se\",
-13910
),
array (
\"sen\",
-13907
),
array (
\"seng\",
-13906
),
array (
\"sha\",
-13905
),
array (
\"shai\",
-13896
),
array (
\"shan\",
-13894
),
array (
\"shang\",
-13878
),
array (
\"shao\",
-13870
),
array (
\"she\",
-13859
),
array (
\"shen\",
-13847
),
array (
\"sheng\",
-13831
),
array (
\"shi\",
-13658
),
array (
\"shou\",
-13611
),
array (
\"shu\",
-13601
),
array (
\"shua\",
-13406
),
array (
\"shuai\",
-13404
),
array (
\"shuan\",
-13400
),
array (
\"shuang\",
-13398
),
array (
\"shui\",
-13395
),
array (
\"shun\",
-13391
),
array (
\"shuo\",
-13387
),
array (
\"si\",
-13383
),
array (
\"song\",
-13367
),
array (
\"sou\",
-13359
),
array (
\"su\",
-13356
),
array (
\"suan\",
-13343
),
array (
\"sui\",
-13340
),
array (
\"sun\",
-13329
),
array (
\"suo\",
-13326
),
array (
\"ta\",
-13318
),
array (
\"tai\",
-13147
),
array (
\"tan\",
-13138
),
array (
\"tang\",
-13120
),
array (
\"tao\",
-13107
),
array (
\"te\",
-13096
),
array (
\"teng\",
-13095
),
array (
\"ti\",
-13091
),
array (
\"tian\",
-13076
),
array (
\"tiao\",
-13068
),
array (
\"tie\",
-13063
),
array (
\"ting\",
-13060
),
array (
\"tong\",
-12888
),
array (
\"tou\",
-12875
),
array (
\"tu\",
-12871
),
array (
\"tuan\",
-12860
),
array (
\"tui\",
-12858
),
array (
\"tun\",
-12852
),
array (
\"tuo\",
-12849
),
array (
\"wa\",
-12838
),
array (
\"wai\",
-12831
),
array (
\"wan\",
-12829
),
array (
\"wang\",
-12812
),
array (
\"wei\",
-12802
),
array (
\"wen\",
-12607
),
array (
\"weng\",
-12597
),
array (
\"wo\",
-12594
),
array (
\"wu\",
-12585
),
array (
\"xi\",
-12556
),
array (
\"xia\",
-12359
),
array (
\"xian\",
-12346
),
array (
\"xiang\",
-12320
),
array (
\"xiao\",
-12300
),
array (
\"xie\",
-12120
),
array (
\"xin\",
-12099
),
array (
\"xing\",
-12089
),
array (
\"xiong\",
-12074
),
array (
\"xiu\",
-12067
),
array (
\"xu\",
-12058
),
array (
\"xuan\",
-12039
),
array (
\"xue\",
-11867
),
array (
\"xun\",
-11861
),
array (
\"ya\",
-11847
),
array (
\"yan\",
-11831
),
array (
\"yang\",
-11798
),
array (
\"yao\",
-11781
),
array (
\"ye\",
-11604
),
array (
\"yi\",
-11589
),
array (
\"yin\",
-11536
),
array (
\"ying\",
-11358
),
array (
\"yo\",
-11340
),
array (
\"yong\",
-11339
),
array (
\"you\",
-11324
),
array (
\"yu\",
-11303
),
array (
\"yuan\",
-11097
),
array (
\"yue\",
-11077
),
array (
\"yun\",
-11067
),
array (
\"za\",
-11055
),
array (
\"zai\",
-11052
),
array (
\"zan\",
-11045
),
array (
\"zang\",
-11041
),
array (
\"zao\",
-11038
),
array (
\"ze\",
-11024
),
array (
\"zei\",
-11020
),
array (
\"zen\",
-11019
),
array (
\"zeng\",
-11018
),
array (
\"zha\",
-11014
),
array (
\"zhai\",
-10838
),
array (
\"zhan\",
-10832
),
array (
\"zhang\",
-10815
),
array (
\"zhao\",
-10800
),
array (
\"zhe\",
-10790
),
array (
\"zhen\",
-10780
),
array (
\"zheng\",
-10764
),
array (
\"zhi\",
-10587
),
array (
\"zhong\",
-10544
),
array (
\"zhou\",
-10533
),
array (
\"zhu\",
-10519
),
array (
\"zhua\",
-10331
),
array (
\"zhuai\",
-10329
),
array (
\"zhuan\",
-10328
),
array (
\"zhuang\",
-10322
),
array (
\"zhui\",
-10315
),
array (
\"zhun\",
-10309
),
array (
\"zhuo\",
-10307
),
array (
\"zi\",
-10296
),
array (
\"zong\",
-10281
),
array (
\"zou\",
-10274
),
array (
\"zu\",
-10270
),
array (
\"zuan\",
-10262
),
array (
\"zui\",
-10260
),
array (
\"zun\",
-10256
),
array (
\"zuo\",
-10254
)
);
function g($num) {
if ($num > 0 && $num < 160) {
return chr($num);
}
elseif ($num < -20319 || $num > -10247) {
return \"\";
} else {
for ($i = count($this->d) - 1; $i >= 0; $i--) {
if ($this->d[$i][1] <= $num)
break;
}
return $this->d[$i][0];
}
}
function c($str) {
$ret = \"\";
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;
}
$ret .= $this->g($p);
}
$ret = substr($ret, 0, 1);
return $ret;
}
function f($str) {
$ret = \"\";
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;
}
$ret .= $this->g($p);
}
return $ret;
}
/*
PHP截取UTF-8编码的中英文字符串
*/
function utf8_substr($str, $from, $len) {
return preg_replace(\'#^(?:[\\x00-\\x7F]|[\\xC0-\\xFF][\\x80-\\xBF]+){0,\' . $from . \'}\' . \'((?:[\\x00-\\x7F]|[\\xC0-\\xFF][\\x80-\\xBF]+){0,\' . $len . \'}).*#s\', \'$1\', $str);
}
/*
将中英文字符串转换成拼音
*/
function strtopin($chinese,$type=0) {
$i = 0;
$pinyin = \"\";
$arr = array ();
while (1) {
$str = $this->utf8_substr($chinese, $i, 1);
if (!empty ($str)) {
$arr[$i] = $str;
$str = iconv(\"utf-8\", \"gb2312\", $str);
if($type==1){ //转换成首字母
$pinyin .= $this->c($str);
}else{ //转换成全拼
$pinyin .= $this->f($str).\" \";
}
$i = $i +1;
} else
break;
}
return $pinyin;
}
}
?>