PHP自定义函数实现文字到拼音转换功能

整个过程用到了pinyin.table文件。

pinyin.php

<?php
	header("Content-Type:text/html;charset=utf-8");
	
	$letters = "";	

	if ($_GET) {
		$cat_name = $_GET["cat_name"];
		$catname = convert($cat_name);
		$letters = get_letter($catname, false);
	}

	function get_letter($catname, $letter = true) {
		return $letter ? strtolower(substr(gb2py($catname), 0, 1)) : str_replace(' ', '', gb2py($catname));
	}

	function gb2py($text, $exp = '') {
		if(!$text) return '';
		
		$data = array();
		$tmp = @file('pinyin.table'); // 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。
		if(!$tmp) return '';
		$tmps = count($tmp);
		for($i = 0; $i < $tmps; $i++) {
			$tmp1 = explode("	", $tmp[$i]);
			$data[$i]=array($tmp1[0], $tmp1[1]);
		}
		$r = array();
		$k = 0;
		$textlen = strlen($text);
		for($i = 0; $i < $textlen; $i++) {
			$p = ord(substr($text, $i, 1));
			if($p > 160) {
				$q = ord(substr($text, ++$i, 1));
				$p = $p*256+$q-65536;
			}
			if($p > 0 && $p < 160) {
				$r[$k] = chr($p);
			} elseif($p< -20319 || $p > -10247) {
				$r[$k] = '';
			} else {
				for($j = $tmps-1; $j >= 0; $j--) {
					if($data[$j][1]<=$p) break;
				}
				$r[$k] = $data[$j][0];
			}
			$k++;
		}

		return implode($exp, $r);
	}
	
	function convert($str, $from = 'utf-8', $to = 'gb2312') {
		if(!$str) return '';
		$from = strtolower($from);
		$to = strtolower($to);
		if($from == $to) return $str;
		$from = str_replace('gbk', 'gb2312', $from);
		$to = str_replace('gbk', 'gb2312', $to);
		$from = str_replace('utf8', 'utf-8', $from);
		$to = str_replace('utf8', 'utf-8', $to);
		if($from == $to) return $str;
		$tmp = array();
		if(function_exists('iconv')) {
			if(is_array($str)) {
				foreach($str as $key => $val) {
					$tmp[$key] = iconv($from, $to."//IGNORE", $val);
				}
				return $tmp;
			} else {
				return iconv($from, $to."//IGNORE", $str);
			}
		} else if(function_exists('mb_convert_encoding')) {
			if(is_array($str)) {
				foreach($str as $key => $val) {
					$tmp[$key] = mb_convert_encoding($val, $to, $from);
				}
				return $tmp;
			} else {
				return mb_convert_encoding($str, $to, $from);
			}
		} else {
			require_once 'convert.func.php';
			return dconvert($str, $to, $from);
		}
	}
	
?>

<form action="./" method="get">
	<input type="text" name="cat_name" value="<?php echo $cat_name?>" />
	<input type="submit" value="提交" /><br />
</form>

<?php 
	echo $letters;
?>

pinyin.table

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

备注:新建text文件复制下面代码到文件,重命名文件名pinyin.table

Pinyin 基于 CC-CEDICT 词典的中文拼音工具,更准确的支持多音字的汉字拼音解决方案。 安装 使用 Composer 安装: composer require "overtrue/pinyin:~3.0" 使用 拼音数组 use Overtrue\Pinyin\Pinyin; $pinyin = new Pinyin(); $pinyin->convert('着希望去旅行,比到达终点更美好'); // ["dai", "zhe", "xi", "wang", "qu", "lu", "xing", "bi", "dao", "da", "zhong", "dian", "geng", "mei", "hao"] $pinyin->convert('着希望去旅行,比到达终点更美好', PINYIN_UNICODE); // ["dài","zhe","xī","wàng","qù","lǚ","xíng","bǐ","dào","dá","zhōng","diǎn","gèng","měi","hǎo"] $pinyin->convert('着希望去旅行,比到达终点更美好', PINYIN_ASCII); //["dai4","zhe","xi1","wang4","qu4","lv3","xing2","bi3","dao4","da2","zhong1","dian3","geng4","mei3","hao3"] 选项: 选项 描述 PINYIN_NONE 不音调输出:mei hao PINYIN_ASCII 数字式音调:mei3 hao3 PINYIN_UNICODE UNICODE 式音调:měi hǎo 生成用于链接的拼音字符串 $pinyin->permlink('着希望去旅行'); // dai-zhe-xi-wang-qu-lu-xing $pinyin->permlink('着希望去旅行', '.'); // dai.zhe.xi.wang.qu.lu.xing 获取首字符字符串 $pinyin->abbr('着希望去旅行'); // dzxwqlx $pinyin->abbr('着希望去旅行', '-'); // d-z-x-w-q-l-x 翻译整段文字拼音 将会保留中文字符:,。 ! ? : “ ” ‘ ’并替换为对应的英文符号。 $pinyin->sentence('着希望去旅行,比到达终点更美好!'); // dai zhe xi wang qu lv xing, bi dao da zhong dian geng mei hao! $pinyin->sentence('着希望去旅行,比到达终点更美好!', true); // dài zhe xī wàng qù lǚ xíng, bǐ dào dá zhōng diǎn gèng měi hǎo! 翻译姓名 姓名的姓的读音有些与普通字不一样,比如 ‘单’ 常见的音为dan,而作为姓的时候读shan。 $pinyin->name('单某某'); // ['shan', 'mou', 'mou'] $pinyin->name('单某某', PINYIN_UNICODE); // ["shàn","mǒu","mǒu"] 在 Laravel 中使用 独立的包在这里:overtrue/laravel-pinyin Contribution 欢迎提意见及完善补充词库 tools/patches/ 参考 详细参考资料 License MIT 标签:Pinyin
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值