當前位置:編程學習大全網 - 源碼下載 - php 中文轉拼音首字母問題

php 中文轉拼音首字母問題

原始代碼有些問題,我做了些更改,原地址github 的 chenall/chenall/blob/master/php/tools/ZH-cn_TO_pinyin.php

<?php

/*

中文漢字轉拼音首字母的PHP簡易實現方法.

要求:?只能是GB2312碼表裏面中文字符

轉換得到字符串對應的拼音首字母大寫.

用法:

echo?zh2py::conv('Chinese?中華人民***和國');//Chinese?ZHRMGHG

$py?=?new?zh2py;

echo?$py->conv('Chinese?中華人民***和國');//Chinese?ZHRMGHG

*/

class?zh2py

{

//根據漢字區位表

//我們可以看到從16-55區之間是按拼音字母排序的,所以我們只需要判斷某個漢字的區位碼就可以得知它的拼音首字母.

//區位表第壹部份,按拼音字母排序的.

//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

*/

private?static?$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

);

private?static?$FirstLetter?=?"ABCDEFGHJKLMNOPQRSTWXYZ";

//區位表第二部份,不規則的,下面的字母是每個區裏面對應字的拼音首字母.從網上查詢整理出來的,可能會有部份錯誤.

//56區-87區

private?static?$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",

);

public?static?function?utf8_to_gbk($string)//編碼轉換,必須轉換成GB2312字符,這裏只是簡單的判斷並不是很準確,可以自己寫壹個.

{

if?(mb_check_encoding($string,'gb2312'))

return?$string;

if?(function_exists('iconv'))

return?iconv("utf-8","gb2312//IGNORE",$string);

return?mb_convert_encoding($string,'gb2312','utf-8');?

}

public?static?function?conv($str)

{

$str?=?self::utf8_to_gbk($str);

$len?=?strlen($str);

$newStr?=?'';

for($i=0;?$i<$len?;?++$i)

{

$H?=?ord($str[$i]);

$L?=?ord($str[$i+1]);

//字符集非法

if?($H?<?0xB0?||?$L?<?0xA1?||?$H?>?0xF7?||?$L?==?0xFF)

{

$newStr?.=?$str[$i];

continue;

}

if?($H?<?0xD8)//($H?>=?0xB0?&&?$H?<=0xD7)//查詢文字在壹級漢字區(16-55)

{

$W?=?($H?<<?8)?|?$L;

foreach(self::$FirstTable?as?$key=>$value)

{

if?($W?<?$value)

{

$newStr?.=?self::$FirstLetter[$key];

break;

}

}

}

else//?if?(H?>=?0xD8?&&?H?<=?0xF7)//查詢中文在二級漢字區(56-87)

$newStr?.=self::$SecondTable[$H?-?0xD8][$L-0xA1];

++$i;

}

return?$newStr;

}

}

echo?zh2py::conv('妃');//F

  • 上一篇:微信上線語音轉文字功能,福建人該如何挽救非常不準的普通話?
  • 下一篇:開發制作app軟件
  • copyright 2024編程學習大全網