搜尋
首頁php教程php手册最全的PHP汉字转拼音函数(共25961字,包含20902个基本汉字+5059

感谢南湖船老大和mark35,已经更新和修正。 此函数非常简单,没有使用正则表达式和转码函数,只使用了简单的数组遍历,在兼容性和性能方面都比较好吧。 pinyin.php共25961字,包括20902个基本汉字(Unicode码0x4e00-0x9fa5)和6582个汉字(Unicode码0x3400-0x

感谢 南湖船老大 和 mark35,已经更新和修正。

此函数非常简单,没有使用正则表达式和转码函数,只使用了简单的数组遍历,在兼容性和性能方面都比较好吧。

pinyin.php 共25961字,包括 20902个基本汉字(Unicode码0x4e00-0x9fa5)和 6582个汉字(Unicode码0x3400-0x4db5,只收集到其中5059生僻字的拼音,微软全拼码表中不包含这5059个生僻字。相比我之前发的 PHP汉字转拼音类(http://www.oschina.net/code/snippet_862384_25392) 全太多,这个类只支持3755字。)

pinyin_gbk.php 共20902字,不过好像有100多字在GBK下不支持。

pinyin_ms.php 共27900字(重复6998个多音字,实际字数20902个),拼音库来源于windosw系统自带全拼码表(虽然还可以收集一下其他拼音输入法码表,可能更多字数,但我觉得微软的字库比较权威,同时20902个汉字已经能满足常用汉字的所有需求了,字库越大程序性能越低。)

pinyin_mini.php 只支持3755字,如果是UTF-8,需要使用 iconv 转码,优点文件小,速度快。

性能测试如下:
pinyin.php 这函数我本机测试执行时间在0.04左右,如果把汉字转拼音库直接改成数组,可以提高0.03秒,不过文件要大一半,在意执行时间,不在意文件大小的,可以自己改一下。
pinyin_mini.php 执行时间比较快,大概在0.004秒左右,比这个大库快10倍。在意性能,对拼音库要求不高的朋友可以使用这个类。

为考虑程序性能,没有考虑支持多音字,我个人觉得也没有必要牺牲更多性能去支持多音字。如果喜欢折腾这个问题的朋友,可以下载uniku.zip、TableTextServiceSimplifiedQuanPin.zip,里面有我收集的一些词库,对解决多音字问题应该有帮助。

源码与演示:源码出处

<?php

$start_time = microtime(1);

// 此类是根据ASCII码转换,GB2312库对多音字也无能为力,此类优点是性能比较高。
// GB2312标准共收录6763个汉字,此类的算法只支持其中的一级汉字3755个,不在范围内的汉字是无法转换,如:中国前总理朱镕基的“镕”字。
class pinyin{
	public static function utf8_to($s, $isfirst = false) {
		return self::to(self::utf8_to_gb2312($s), $isfirst);
	}

	public static function utf8_to_gb2312($s) {
		return iconv('UTF-8', 'GB2312//IGNORE', $s);
	}

	// 字符串必须为GB2312编码
	public static function to($s, $isfirst = false) {
		$res = '';
		$len = strlen($s);
		$pinyin_arr = self::get_pinyin_array();
		for($i=0; $i<$len; $i++) {
			$ascii = ord($s[$i]);
			if($ascii > 0x80) {
				$ascii2 = ord($s[++$i]);
				$ascii = $ascii * 256 + $ascii2 - 65536;
			}

			if($ascii < 255 && $ascii > 0) {
				if(($ascii >= 48 && $ascii <= 57) || ($ascii >= 97 && $ascii <= 122)) {
					$res .= $s[$i]; // 0-9 a-z
				}elseif($ascii >= 65 && $ascii <= 90) {
					$res .= strtolower($s[$i]); // A-Z
				}else{
					$res .= '_';
				}
			}elseif($ascii < -20319 || $ascii > -10247) {
				$res .= '_';
			}else{
				foreach($pinyin_arr as $py=>$asc) {
					if($asc <= $ascii) {
						$res .= $isfirst ? $py[0] : $py;
						break;
					}
				}
			}
		}
		return $res;
	}

	public static function to_first($s) {
		$ascii = ord($s[0]);
		if($ascii > 0xE0) {
			$s = self::utf8_to_gb2312($s[0].$s[1].$s[2]);
		}elseif($ascii < 0x80) {
			if($ascii >= 65 && $ascii <= 90) {
				return strtolower($s[0]);
			}elseif($ascii >= 97 && $ascii <= 122) {
				return $s[0];
			}else{
				return false;
			}
		}

		if(strlen($s) < 2) {
			return false;
		}

		$asc = ord($s[0]) * 256 + ord($s[1]) - 65536;

		if($asc>=-20319 && $asc<=-20284) return 'a';
		if($asc>=-20283 && $asc<=-19776) return 'b';
		if($asc>=-19775 && $asc<=-19219) return 'c';
		if($asc>=-19218 && $asc<=-18711) return 'd';
		if($asc>=-18710 && $asc<=-18527) return 'e';
		if($asc>=-18526 && $asc<=-18240) return 'f';
		if($asc>=-18239 && $asc<=-17923) return 'g';
		if($asc>=-17922 && $asc<=-17418) return 'h';
		if($asc>=-17417 && $asc<=-16475) return 'j';
		if($asc>=-16474 && $asc<=-16213) return 'k';
		if($asc>=-16212 && $asc<=-15641) return 'l';
		if($asc>=-15640 && $asc<=-15166) return 'm';
		if($asc>=-15165 && $asc<=-14923) return 'n';
		if($asc>=-14922 && $asc<=-14915) return 'o';
		if($asc>=-14914 && $asc<=-14631) return 'p';
		if($asc>=-14630 && $asc<=-14150) return 'q';
		if($asc>=-14149 && $asc<=-14091) return 'r';
		if($asc>=-14090 && $asc<=-13319) return 's';
		if($asc>=-13318 && $asc<=-12839) return 't';
		if($asc>=-12838 && $asc<=-12557) return 'w';
		if($asc>=-12556 && $asc<=-11848) return 'x';
		if($asc>=-11847 && $asc<=-11056) return 'y';
		if($asc>=-11055 && $asc<=-10247) return 'z';
		return false;
	}

	public static function get_pinyin_array() {
		static $py_arr;
		if(isset($py_arr)) return $py_arr;

		$k = 'a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha|chai|chan|chang|chao|che|chen|cheng|chi|chong|chou|chu|chuai|chuan|chuang|chui|chun|chuo|ci|cong|cou|cu|cuan|cui|cun|cuo|da|dai|dan|dang|dao|de|deng|di|dian|diao|die|ding|diu|dong|dou|du|duan|dui|dun|duo|e|en|er|fa|fan|fang|fei|fen|feng|fo|fou|fu|ga|gai|gan|gang|gao|ge|gei|gen|geng|gong|gou|gu|gua|guai|guan|guang|gui|gun|guo|ha|hai|han|hang|hao|he|hei|hen|heng|hong|hou|hu|hua|huai|huan|huang|hui|hun|huo|ji|jia|jian|jiang|jiao|jie|jin|jing|jiong|jiu|ju|juan|jue|jun|ka|kai|kan|kang|kao|ke|ken|keng|kong|kou|ku|kua|kuai|kuan|kuang|kui|kun|kuo|la|lai|lan|lang|lao|le|lei|leng|li|lia|lian|liang|liao|lie|lin|ling|liu|long|lou|lu|lv|luan|lue|lun|luo|ma|mai|man|mang|mao|me|mei|men|meng|mi|mian|miao|mie|min|ming|miu|mo|mou|mu|na|nai|nan|nang|nao|ne|nei|nen|neng|ni|nian|niang|niao|nie|nin|ning|niu|nong|nu|nv|nuan|nue|nuo|o|ou|pa|pai|pan|pang|pao|pei|pen|peng|pi|pian|piao|pie|pin|ping|po|pu|qi|qia|qian|qiang|qiao|qie|qin|qing|qiong|qiu|qu|quan|que|qun|ran|rang|rao|re|ren|reng|ri|rong|rou|ru|ruan|rui|run|ruo|sa|sai|san|sang|sao|se|sen|seng|sha|shai|shan|shang|shao|she|shen|sheng|shi|shou|shu|shua|shuai|shuan|shuang|shui|shun|shuo|si|song|sou|su|suan|sui|sun|suo|ta|tai|tan|tang|tao|te|teng|ti|tian|tiao|tie|ting|tong|tou|tu|tuan|tui|tun|tuo|wa|wai|wan|wang|wei|wen|weng|wo|wu|xi|xia|xian|xiang|xiao|xie|xin|xing|xiong|xiu|xu|xuan|xue|xun|ya|yan|yang|yao|ye|yi|yin|ying|yo|yong|you|yu|yuan|yue|yun|za|zai|zan|zang|zao|ze|zei|zen|zeng|zha|zhai|zhan|zhang|zhao|zhe|zhen|zheng|zhi|zhong|zhou|zhu|zhua|zhuai|zhuan|zhuang|zhui|zhun|zhuo|zi|zong|zou|zu|zuan|zui|zun|zuo';
		$v = '-20319|-20317|-20304|-20295|-20292|-20283|-20265|-20257|-20242|-20230|-20051|-20036|-20032|-20026|-20002|-19990|-19986|-19982|-19976|-19805|-19784|-19775|-19774|-19763|-19756|-19751|-19746|-19741|-19739|-19728|-19725|-19715|-19540|-19531|-19525|-19515|-19500|-19484|-19479|-19467|-19289|-19288|-19281|-19275|-19270|-19263|-19261|-19249|-19243|-19242|-19238|-19235|-19227|-19224|-19218|-19212|-19038|-19023|-19018|-19006|-19003|-18996|-18977|-18961|-18952|-18783|-18774|-18773|-18763|-18756|-18741|-18735|-18731|-18722|-18710|-18697|-18696|-18526|-18518|-18501|-18490|-18478|-18463|-18448|-18447|-18446|-18239|-18237|-18231|-18220|-18211|-18201|-18184|-18183|-18181|-18012|-17997|-17988|-17970|-17964|-17961|-17950|-17947|-17931|-17928|-17922|-17759|-17752|-17733|-17730|-17721|-17703|-17701|-17697|-17692|-17683|-17676|-17496|-17487|-17482|-17468|-17454|-17433|-17427|-17417|-17202|-17185|-16983|-16970|-16942|-16915|-16733|-16708|-16706|-16689|-16664|-16657|-16647|-16474|-16470|-16465|-16459|-16452|-16448|-16433|-16429|-16427|-16423|-16419|-16412|-16407|-16403|-16401|-16393|-16220|-16216|-16212|-16205|-16202|-16187|-16180|-16171|-16169|-16158|-16155|-15959|-15958|-15944|-15933|-15920|-15915|-15903|-15889|-15878|-15707|-15701|-15681|-15667|-15661|-15659|-15652|-15640|-15631|-15625|-15454|-15448|-15436|-15435|-15419|-15416|-15408|-15394|-15385|-15377|-15375|-15369|-15363|-15362|-15183|-15180|-15165|-15158|-15153|-15150|-15149|-15144|-15143|-15141|-15140|-15139|-15128|-15121|-15119|-15117|-15110|-15109|-14941|-14937|-14933|-14930|-14929|-14928|-14926|-14922|-14921|-14914|-14908|-14902|-14894|-14889|-14882|-14873|-14871|-14857|-14678|-14674|-14670|-14668|-14663|-14654|-14645|-14630|-14594|-14429|-14407|-14399|-14384|-14379|-14368|-14355|-14353|-14345|-14170|-14159|-14151|-14149|-14145|-14140|-14137|-14135|-14125|-14123|-14122|-14112|-14109|-14099|-14097|-14094|-14092|-14090|-14087|-14083|-13917|-13914|-13910|-13907|-13906|-13905|-13896|-13894|-13878|-13870|-13859|-13847|-13831|-13658|-13611|-13601|-13406|-13404|-13400|-13398|-13395|-13391|-13387|-13383|-13367|-13359|-13356|-13343|-13340|-13329|-13326|-13318|-13147|-13138|-13120|-13107|-13096|-13095|-13091|-13076|-13068|-13063|-13060|-12888|-12875|-12871|-12860|-12858|-12852|-12849|-12838|-12831|-12829|-12812|-12802|-12607|-12597|-12594|-12585|-12556|-12359|-12346|-12320|-12300|-12120|-12099|-12089|-12074|-12067|-12058|-12039|-11867|-11861|-11847|-11831|-11798|-11781|-11604|-11589|-11536|-11358|-11340|-11339|-11324|-11303|-11097|-11077|-11067|-11055|-11052|-11045|-11041|-11038|-11024|-11020|-11019|-11018|-11014|-10838|-10832|-10815|-10800|-10790|-10780|-10764|-10587|-10544|-10533|-10519|-10331|-10329|-10328|-10322|-10315|-10309|-10307|-10296|-10281|-10274|-10270|-10262|-10260|-10256|-10254';
		$key = explode('|', $k);
		$val = explode('|', $v);
		$py_arr = array_combine($key, $val);
		arsort($py_arr);

		return $py_arr;
	}
}

/*
var_dump(0xE0);
for($i=0; $i<=255; $i++) {
	var_dump("$i :". chr($i));
}
*/

var_dump(pinyin::utf8_to('朱镕基'));
var_dump(pinyin::utf8_to('我是中国人'));
var_dump(pinyin::utf8_to('PHP汉字转拼音类'));
var_dump(pinyin::utf8_to('GB2312标准共收录6763个汉字,不在范围内的汉字是无法转换,如:中国前总理朱镕基的“镕”字。'));
var_dump(pinyin::utf8_to('`1234567890-=QWERTYUIOP[]ASDFGHJKL;ZXCVBNM,./abcdefghijklmnopqrstuvwxyz'));

var_dump(pinyin::utf8_to('朱镕基', 1));
var_dump(pinyin::utf8_to('我是中国人', 1));
var_dump(pinyin::utf8_to('PHP汉字转拼音类', 1));
var_dump(pinyin::utf8_to('GB2312标准共收录6763个汉字,不在范围内的汉字是无法转换,如:中国前总理朱镕基的“镕”字。', 1));
var_dump(pinyin::utf8_to('`1234567890-=QWERTYUIOP[]ASDFGHJKL;ZXCVBNM,./abcdefghijklmnopqrstuvwxyz', 1));

var_dump(pinyin::to_first('朱镕基'));
var_dump(pinyin::to_first('我是中国人'));
var_dump(pinyin::to_first('PHP汉字转拼音类'));
var_dump(pinyin::to_first('GB2312标准共收录6763个汉字,不在范围内的汉字是无法转换,如:中国前总理朱镕基的“镕”字。'));
var_dump(pinyin::to_first('▂▃▄▅▆▇█▉`1234567890-=QWERTYUIOP[]ASDFGHJKL;ZXCVBNM,./abcdefghijklmnopqrstuvwxyz'));

echo number_format(microtime(1) - $start_time, 6);

?>
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具