If li_SectorCode > 15 And li_SectorCode < 56 Then '第一个字符 For j = 23 To 1 Step -1 '找声母 If li_SecPosCode >= li_SecPosValue(j - 1) Then ls_ReturnStr = ls_ReturnStr + lc_FirstLetter(j - 1) Exit For End If Next Else '第一个字符 li_offset = (li_SectorCode - 56) * 94 + li_PositionCode '计算偏移量
If li_offset >= 1 And li_offset <= 3008 Then '二区汉字 ls_ReturnStr = ls_ReturnStr + Mid(ls_SecondSecTable, li_offset, 1) '取出此字声母 End If End If End IfNext If ReturnBig Then GetPY = UCase(ls_ReturnStr) Else GetPY = LCase(ls_ReturnStr) End IfEnd Function </script> <script language="javascript"> window.prompt("",GetPY("这是一个测试,abcdefg,比方说如果这个函数是 js 的,我可以用下面的方法做一个实时的显示",false,true)); window.prompt("",GetPY("这是一个测试,abcdefg,比方说如果这个函数是 js 的,我可以用下面的方法做一个实时的显示",true,false)); </script>
<script language="vbscript">
Function GetPY(as_InputString,ReturnBig,isall)'-------------------------------------------------------------------------------
'Last Modified :01/18/2002'Name :GetPY'Used to :返回给定汉字串的首字母串,即声母串'Input Arguments:as_InputString - string , 给定的汉字串' :ReturnBig - Boolean,可选,如为false则返回小写拼音,否则为大写,' 缺省为大写' :isall - Boolean,如为flase则返回第一个字的拼音首字符'Return Value :ls_ReturnString - String , 给定的汉字串的声母串,一律为小写'Notice :1. 此方法基于汉字的国标汉字库区位编码的有效性,不符合此编码的' 系统此函数无效!' 2. 若汉字串含有ASCII码将保持不变,但非汉字字符的图形符号等将略去。' 3. 其中若有空格,则略去'Sample :ls_rtn =GetPY("中华人民共和国",false)' ls_rtn will be : zhrmghg'------------------------------------------------------------------------------- Dim lc_FirstLetter '存放国标一级汉字不同读音的起始区位码对应读音Dim ls_ch '临时单元Dim ls_SecondSecTable '存放所有国标二级汉字读音Dim ls_ReturnStr '返回串Dim li_SecPosValue '存放国标一级汉字不同读音的起始区位码Dim li_SectorCode '汉字区码Dim li_PositionCode '汉字位码Dim li_SecPosCode '汉字区位码Dim li_offset '二级字库偏移量Dim iDim j as_InputString = Replace(as_InputString, " ", "")li_SecPosValue = Array(1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858, 4027, 4086, 4390, 4558, 4684, 4925, 5249)lc_FirstLetter = Array("A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "W", "X", "Y", "Z")ls_SecondSecTable = "" ls_SecondSecTable = ls_SecondSecTable + "cjwgnspgcenegypbtwxzdxykygtpjnmjqmbsgzscyjsyyfpggbzgydywjkgaljswkbjqhyjwpdzlsgmrybywwccgznkydg"ls_SecondSecTable = ls_SecondSecTable + "ttngjeyekzydcjnmcylqlypyqbqrpzslwbdgkjfyxjwcltbncxjjjjcxdtqsqzycdxxhgckbphffsspybgmxjbbyglbhls"ls_SecondSecTable = ls_SecondSecTable + "smzmpjhsojnghdzcdklgjhsgqzhxqgkezzwymcscjnyetxadzpmdssmzjjqjyzcjjfwqjbdzbjgdnzcbwhgxhqkmwfbpbq"ls_SecondSecTable = ls_SecondSecTable + "dtjjzkqhylcgxfptyjyyzpsjlfchmqshgmmxsxjpkdcmbbqbefsjwhwwgckpylqbgldlcctnmaeddksjngkcsgxlhzaybd"ls_SecondSecTable = ls_SecondSecTable + "btsdkdylhgymylcxpycjndqjwxqxfyyfjlejbzrwccqhqcsbzkymgplbmcrqcflnymyqmsqtrbcjthztqfrxchxmcjcjlx"ls_SecondSecTable = ls_SecondSecTable + "qgjmshzkbswxemdlckfsydsglycjjssjnqbjctyhbftdcyjdgwyghqfrxwckqkxebpdjpxjqsrmebwgjlbjslyysmdxlcl"ls_SecondSecTable = ls_SecondSecTable + "qkxlhtjrjjmbjhxhwywcbhtrxxglhjhfbmgykldyxzpplggpmtcbbajjzyljtyanjgbjflqgdzyqcaxbkclecjsznslyzh"ls_SecondSecTable = ls_SecondSecTable + "lxlzcghbxzhznytdsbcjkdlzayffydlabbgqszkggldndnyskjshdlxxbcghxyggdjmmzngmmccgwzszxsjbznmlzdthcq"ls_SecondSecTable = ls_SecondSecTable + "ydbdllscddnlkjyhjsycjlkohqasdhnhcsgaehdaashtcplcpqybsdmpjlpcjaqlcdhjjasprchngjnlhlyyqyhwzpnccg"ls_SecondSecTable = ls_SecondSecTable + "wwmzffjqqqqxxaclbhkdjxdgmmydjxzllsygxgkjrywzwyclzmcsjzldbndcfcxyhlschycjqppqagmnyxpfrkssbjlyxy"ls_SecondSecTable = ls_SecondSecTable + "jjglnscmhcwwmnzjjlhmhchsyppttxrycsxbyhcsmxjsxnbwgpxxtaybgajcxlypdccwqocwkccsbnhcpdyznbcyytycks"ls_SecondSecTable = ls_SecondSecTable + "kybsqkkytqqxfcwchcwkelcqbsqyjqcclmthsywhmktlkjlychwheqjhtjhppqpqscfymmcmgbmhglgsllysdllljpchmj"ls_SecondSecTable = ls_SecondSecTable + "hwljcyhzjxhdxjlhxrswlwzjcbxmhzqxsdzpmgfcsglsdymjshxpjxomyqknmyblrthbcftpmgyxlchlhlzylxgssssccl"ls_SecondSecTable = ls_SecondSecTable + "sldclepbhshxyyfhbmgdfycnjqwlqhjjcywjztejjdhfblqxtqkwhdchqxagtlxljxmsljhdzkzjecxjcjnmbbjcsfywkb"ls_SecondSecTable = ls_SecondSecTable + "jzghysdcpqyrsljpclpwxsdwejbjcbcnaytmgmbapclyqbclzxcbnmsggfnzjjbzsfqyndxhpcqkzczwalsbccjxpozgwk"ls_SecondSecTable = ls_SecondSecTable + "ybsgxfcfcdkhjbstlqfsgdslqwzkxtmhsbgzhjcrglyjbpmljsxlcjqqhzmjczydjwbmjklddpmjegxyhylxhlqyqhkycw"ls_SecondSecTable = ls_SecondSecTable + "cjmyhxnatjhyccxzpcqlbzwwwtwbqcmlbmynjcccxbbsnzzljpljxyztzlgcldcklyrzzgqtgjhhgjljaxfgfjzslcfdqz"ls_SecondSecTable = ls_SecondSecTable + "lclgjdjcsnclljpjqdcclcjxmyzftsxgcgsbrzxjqqcczhgyjdjqqlzxjyldlbcyamcstylbdjbyregklzdzhldszchznw"ls_SecondSecTable = ls_SecondSecTable + "czcllwjqjjjkdgjcolbbzppglghtgzcygezmycnqcycyhbhgxkamtxyxnbskyzzgjzlqjdfcjxdygjqjjpmgwgjjjpkjsb"ls_SecondSecTable = ls_SecondSecTable + "gbmmcjssclpqpdxcdyykypcjddyygywchjrtgcnyqldkljczzgzccjgdyksgpzmdlcphnjafyzdjcnmwescsglbtzcgmsd"ls_SecondSecTable = ls_SecondSecTable + "llyxqsxsbljsbbsgghfjlwpmzjnlyywdqshzxtyywhmcyhywdbxbtlmswyyfsbjcbdxxlhjhfpsxzqhfzmqcztqcxzxrdk"ls_SecondSecTable = ls_SecondSecTable + "djhnnyzqqfnqdmmgnydxmjgdhcdycbffallztdltfkmxqzdngeqdbdczjdxbzgsqqddjcmbkxffxmkdmcsychzcmljdjyn"ls_SecondSecTable = ls_SecondSecTable + "hprsjmkmpcklgdbqtfzswtfgglyplljzhgjjgypzltcsmcnbtjbhfkdhbyzgkpbbymtdlsxsbnpdkleycjnycdykzddhqg"ls_SecondSecTable = ls_SecondSecTable + "sdzsctarlltkzlgecllkjljjaqnbdggghfjtzqjsecshalqfmmgjnlyjbbtmlycxdcjpldlpcqdhsycbzsckbzmsljflhr"
'Enddim getlengthif isall then
getlength = Len(as_InputString)
else
getlength = 1
end ifFor i = 1 To getlength '依次处理as_InputString中每个字符 ls_ch = Mid(as_InputString, i, 1)
If Asc(ls_ch) < 128 And Asc(ls_ch) > 0 Then '非汉字 ls_ReturnStr = ls_ReturnStr + ls_ch '不变 Else '是汉字
li_SectorCode = Int("&H" + Left(Hex(Asc(ls_ch)), 2)) - 160 '区码 li_PositionCode = Int("&H" + Right(Hex(Asc(ls_ch)), 2)) - 160 '位码 li_SecPosCode = li_SectorCode * 100 + li_PositionCode '区位码
If li_SectorCode > 15 And li_SectorCode < 56 Then '第一个字符
For j = 23 To 1 Step -1 '找声母 If li_SecPosCode >= li_SecPosValue(j - 1) Then ls_ReturnStr = ls_ReturnStr + lc_FirstLetter(j - 1) Exit For End If Next Else '第一个字符 li_offset = (li_SectorCode - 56) * 94 + li_PositionCode '计算偏移量
If li_offset >= 1 And li_offset <= 3008 Then '二区汉字 ls_ReturnStr = ls_ReturnStr + Mid(ls_SecondSecTable, li_offset, 1) '取出此字声母 End If End If End IfNext If ReturnBig Then GetPY = UCase(ls_ReturnStr) Else GetPY = LCase(ls_ReturnStr) End IfEnd Function
</script>
<script language="javascript">
window.prompt("",GetPY("这是一个测试,abcdefg,比方说如果这个函数是 js 的,我可以用下面的方法做一个实时的显示",false,true));
window.prompt("",GetPY("这是一个测试,abcdefg,比方说如果这个函数是 js 的,我可以用下面的方法做一个实时的显示",true,false));
</script>