php 中文转拼音首字母问题
发布时间:2025-05-22 19:28:45 发布人:远客网络
一、php 中文转拼音首字母问题
原始代码有些问题,我做了些更改,原地址github的 chenall/chenall/blob/master/php/tools/ZH-cn_TO_pinyin.php
中文汉字转拼音首字母的PHP简易实现方法.
要求:只能是GB2312码表里面中文字符
转换得到字符串对应的拼音首字母大写.
echozh2py::conv('Chinese中华人民共和国');//ChineseZHRMGHG
echo$py->conv('Chinese中华人民共和国');//ChineseZHRMGHG
//我们可以看到从16-55区之间是按拼音字母排序的,所以我们只需要判断某个汉字的区位码就可以得知它的拼音首字母.
//区位表第一部份,按拼音字母排序的.
'A'=>0xB0A1,'B'=>0xB0C5,'C'=>0xB2C1,'D'=>0xB4EE,'E'=>0xB6EA,'F'=>0xB7A2,'G'=>0xB8C1,'H'=>0xB9FE,
'J'=>0xBBF7,'K'=>0xBFA6,'L'=>0xC0AC,'M'=>0xC2E8,'N'=>0xC4C3,'O'=>0xC5B6,'P'=>0xC5BE,'Q'=>0xC6DA,
'R'=>0xC8BB,'S'=>0xC8F6,'T'=>0xCBFA,'W'=>0xCDDA,'X'=>0xCEF4,'Y'=>0xD1B9,'Z'=>0xD4D1
privatestatic$FirstTable=array(
0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,0xBFA6,0xC0AC,0xC2E8,
0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1,0xD7FA
privatestatic$FirstLetter="ABCDEFGHJKLMNOPQRSTWXYZ";
//区位表第二部份,不规则的,下面的字母是每个区里面对应字的拼音首字母.从网上查询整理出来的,可能会有部份错误.
privatestatic$SecondTable=array(
"CJWGNSPGCGNEGYPBTYYZDXYKYGTZJNMJQMBSGZSCYJSYYFPGKBZGYDYWJKGKLJSWKPJQHYJWRDZLSYMRYPYWWCCKZNKYYG",
"TTNGJEYKKZYTCJNMCYLQLYPYSFQRPZSLWBTGKJFYXJWZLTBNCXJJJJTXDTTSQZYCDXXHGCKBPHFFSSTYBGMXLPBYLLBHLX",
"SMZMYJHSOJNGHDZQYKLGJHSGQZHXQGKXZZWYSCSCJXYEYXADZPMDSSMZJZQJYZCJJFWQJBDZBXGZNZCPWHWXHQKMWFBPBY",
"DTJZZKXHYLYGXFPTYJYYZPSZLFCHMQSHGMXXSXJYQDCSBBQBEFSJYHWWGZKPYLQBGLDLCDTNMAYDDKSSNGYCSGXLYZAYPN",
"PTSDKDYLHGYMYLCXPYCJNDQJWXQXFYYFJLEJPZRXCCQWQQSBZKYMGPLBMJRQCFLNYMYQMSQYRBCJTHZTQFRXQHXMQJCJLY",
"QGJMSHZKBSWYEMYLTXFSYDXWLYCJQXSJNQBSCTYHBFTDCYZDJWYGHQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCL",
"QKXLHXJRZJMFQHXHWYWSBHTRXXGLHQHFNMGYKLDYXZPYLGGSMTCFBAJJZYLJTYANJGBJPLQGSZYQYAXBKYSECJSZNSLYZH",
"ZXLZCGHPXZHZNYTDSBCJKDLZAYFFYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNGMMCLGWZSZXZJFZNMLZZTHCS",
"YDBDLLSCDDNLKJYKJSYCJLKWHQASDKNHCSGAGHDAASHTCPLCPQYBSZMPJLPCJOQLCDHJJYSPRCHNWJNLHLYYQYYWZPTCZG",
"WWMZFFJQQQQYXACLBHKDJXDGMMYDJXZLLSYGXGKJRYWZWYCLZMSSJZLDBYDCFCXYHLXCHYZJQSQQAGMNYXPFRKSSBJLYXY",
"SYGLNSCMHCWWMNZJJLXXHCHSYZSTTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLYXDCCWZOCWKCCSBNHCPDYZNFCYYTYCKX",
"KYBSQKKYTQQXFCMCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQKZPQSQSCFYMMDMGBWHWLGSLLYSDLMLXPTHMJ",
"HWLJZYHZJXKTXJLHXRSWLWZJCBXMHZQXSDZPSGFCSGLSXYMJSHXPJXWMYQKSMYPLRTHBXFTPMHYXLCHLHLZYLXGSSSSTCL",
"SLDCLRPBHZHXYYFHBMGDMYCNQQWLQHJJCYWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSLJHTZKZJECXJCJNMFBYCSFYWYB",
"JZGNYSDZSQYRSLJPCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNTXHPLQKZCZWALSBCZJXSYZGWK",
"YPSGXFZFCDKHJGXTLQFSGDSLQWZKXTMHSBGZMJZRGLYJBPMLMSXLZJQQHZYJCZYDJWFMJKLDDPMJEGXYHYLXHLQYQHKYCW",
"CJMYYXNATJHYCCXZPCQLBZWWYTWBQCMLPMYRJCCCXFPZNZZLJPLXXYZTZLGDLTCKLYRZZGQTTJHHHJLJAXFGFJZSLCFDQZ",
"LCLGJDJZSNZLLJPJQDCCLCJXMYZFTSXGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQLZNW",
"CZCLLWJQJJJKDGJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTXYXNBSKYZZGJZLQJTFCJXDYGJQJJPMGWGJJJPKQSB",
"GBMMCJSSCLPQPDXCDYYKYPCJDDYYGYWRHJRTGZNYQLDKLJSZZGZQZJGDYKSHPZMTLCPWNJYFYZDJCNMWESCYGLBTZZGMSS",
"LLYXYSXXBSJSBBSGGHFJLYPMZJNLYYWDQSHZXTYYWHMCYHYWDBXBTLMSYYYFSXJCBDXXLHJHFSSXZQHFZMZCZTQCXZXRTT",
"DJHNRYZQQMTQDMMGNYDXMJGDXCDYZBFFALLZTDLTFXMXQZDNGWQDBDCZJDXBZGSQQDDJCMBKZFFXMKDMDSYYSZCMLJDSYN",
"SPRSKMKMPCKLGTBQTFZSWTFGGLYPLLJZHGJJGYPZLTCSMCNBTJBQFKDHBYZGKPBBYMTDSSXTBNPDKLEYCJNYCDYKZTDHQH",
"SYZSCTARLLTKZLGECLLKJLQJAQNBDKKGHPJTZQKSECSHALQFMMGJNLYJBBTMLYZXDXJPLDLPCQDHZYCBZSCZBZMSLJFLKR",
"ZJSNFRGJHXPDHYJYBZGDLQCSEZGXLBLGYXTWMABCHECMWYJYZLLJJYHLGNDJLSLYGKDZPZXJYYZLWCXSZFGWYYDLYHCLJS",
"CMBJHBLYZLYCBLYDPDQYSXQZBYTDKYXJYYCNRJMPDJGKLCLJBCTBJDDBBLBLCZQRPYXJCJLZCSHLTOLJNMDDDLNGKATHQH",
"JHYKHEZNMSHRPHQQJCHGMFPRXHJGDYCHGHLYRZQLCYQJNZSQTKQJYMSZSWLCFQQQXYFGGYPTQWLMCRNFKKFSYYLQBMQAMM",
"MYXCTPSHCPTXXZZSMPHPSHMCLMLDQFYQXSZYJDJJZZHQPDSZGLSTJBCKBXYQZJSGPSXQZQZRQTBDKYXZKHHGFLBCSMDLDG",
"DZDBLZYYCXNNCSYBZBFGLZZXSWMSCCMQNJQSBDQSJTXXMBLTXZCLZSHZCXRQJGJYLXZFJPHYMZQQYDFQJJLZZNZJCDGZYG",
"CTXMZYSCTLKPHTXHTLBJXJLXSCDQXCBBTJFQZFSLTJBTKQBXXJJLJCHCZDBZJDCZJDCPRNPQCJPFCZLCLZXZDMXMPHJSGZ",
"GSZZQLYLWTJPFSYASMCJBTZYYCWMYTZSJJLJCQLWZMALBXYFBPNLSFHTGJWEJJXXGLLJSTGSHJQLZFKCGNNNSZFDEQFHBS",
"AQTGYLBXMMYGSZLDYDQMJJRGBJTKGDHGKBLQKBDMBYLXWCXYTTYBKMRTJZXQJBHLMHMJJZMQASLDCYXYQDLQCAFYWYXQHZ",
publicstaticfunctionutf8_to_gbk($string)//编码转换,必须转换成GB2312字符,这里只是简单的判断并不是很准确,可以自己写一个.
if(mb_check_encoding($string,'gb2312'))
if(function_exists('iconv'))
returniconv("utf-8","gb2312//IGNORE",$string);
returnmb_convert_encoding($string,'gb2312','utf-8');
publicstaticfunctionconv($str)
if($H<0xB0||$L<0xA1||$H>0xF7||$L==0xFF)
if($H<0xD8)//($H>=0xB0&&$H<=0xD7)//查询文字在一级汉字区(16-55)
foreach(self::$FirstTableas$key=>$value)
$newStr.=self::$FirstLetter[$key];
else//if(H>=0xD8&&H<=0xF7)//查询中文在二级汉字区(56-87)
$newStr.=self::$SecondTable[$H-0xD8][$L-0xA1];
echozh2py::conv('妃');//F
二、php中 提取中文字符首个拼音字母
1、$fchar= ord($s0{0});//获取字符串的第一个字节
2、//判断是不是英文字符,如果是则直接返回该字母大写
3、if($fchar>= ord(“A”) and$fchar<= ord(“z”))return strtoupper($s0{0});
4、//以下代码用字符编码转换函数,通过两种字符集编码转换的对比,判断字符串是哪种字符集
5、$s1=@iconv(“UTF-8″,“GBK”,$s0);
6、$s2=@iconv(“GBK”,“UTF-8″,$s1);
7、//计算给出的字符串的前两个字节内码,然后再根据结果判断在GB字符集中的位置,从而根据位置与拼音的关系,最终得出拼音字母
8、$asc= ord($s{0})* 256+ ord($s{1})– 65536;
9、‘U’、‘V’对中文无效,以下是对H拼音的计算:
10、 if($asc>=-17922 and$asc<=-17418)return"H";
三、php guidPHP中的GUID
1、在PHP环境中,虽然没有内置的GUID生成函数,但我们可以自行编写算法来实现。以下是一个简单的代码示例,用于生成一个符合UUID(通用唯一标识符)格式的GUID:
2、//通过MD5和uniqid函数生成一个随机字符串,并转为大写
3、$charid= strtoupper(md5(uniqid(mt_rand(), true)));
4、$uuid_open= chr(123);//"{"开始
5、$uuid_close= chr(125);//"}"结束
6、 substr($charid, 0, 8).$hyphen.//前8位
7、 substr($charid, 8, 4).$hyphen.//中间4位
8、 substr($charid, 12, 4).$hyphen.//再次4位
9、 substr($charid, 16, 4).$hyphen.//接着4位
10、 substr($charid, 20, 12).//后面的12位
11、这个函数通过生成随机数并使用特定的格式规则,为我们提供了自定义的PHP GUID生成功能。在需要在PHP项目中使用全局唯一标识符时,可以调用此函数获取一个有效的UUID。