//参数,中文字符串
//返回值:拼音首字母串数组function makePy(str){
if(typeof(str) != "string")
throw new Error(-1,"函数makePy需要字符串类型参数!")
var arrResult = new Array() //保存中间结果的数组
for(var i=0,len=str.lengthi<leni++){
//获得unicode码
var ch = str.charAt(i)
//检查该unicode码是否在处理范围之内,在则返回该码对映汉字的拼音首字母,不在则调用其它函数处理
arrResult.push(checkCh(ch))
}
//处理arrResult,返回所有可能的拼音首字母串数组
return mkRslt(arrResult)
}
function checkCh(ch){
var uni = ch.charCodeAt(0)
//如果不在汉字处理范围之内,返回原字符,也可以调用自己的处理函数
if(uni > 40869 || uni < 19968)
return ch //dealWithOthers(ch)
//检查是否是多音字,是按多音字处理,不是就直接在strChineseFirstPY字符串中找对应的首字母
return (oMultiDiff[uni]?oMultiDiff[uni]:(strChineseFirstPY.charAt(uni-19968)))
}
function mkRslt(arr){
var arrRslt = [""]
for(var i=0,len=arr.lengthi<leni++){
var str = arr[i]
var strlen = str.length
if(strlen == 1){
for(var k=0k<arrRslt.lengthk++){
arrRslt[k] += str
}
}else{
var tmpArr = arrRslt.slice(0)
arrRslt = []
for(k=0k<strlenk++){
//复制一个相同的arrRslt
var tmp = tmpArr.slice(0)
//把当前字符str[k]添加到每个元素末尾
for(var j=0j<tmp.lengthj++){
tmp[j] += str.charAt(k)
}
//把复制并修改后的数组连接到arrRslt上
arrRslt = arrRslt.concat(tmp)
}
}
}
return arrRslt
}
//两端去空格函数
String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g,"") }
//查看拼音首字母缩写
function query(){
var str = document.getElementById("txtChinese").value.trim()
if(str == "") return
var arrRslt = makePy(str)
alert(arrRslt)
我先做一个显示完整拼音的脚本如下(把下面的内容保存为一个html文件用IE打开即可显示zhong hua ren min gong he guo):<script type="text/vbscript">
function vbChr(c)
vbChr = chr(c)
end function
function vbAsc(n)
vbAsc = asc(n)
end function
</script>
<script language=javascript>
var py=new Array(20319,
20283,
19775,
19218,
18710,
18526,
18239,
17922,
17922,
17417,
16474,
16212,
15640,
15165,
14922,
14914,
14630,
14149,
14090,
13318,
13318,
13318,
12838,
12556,
11847,
11055,0)
function getPinYin(index){
var i
if(index==0x1534) return 'y'
if(index>0x4F5F||index<0x2807) return ''
i=0while(py[i]>=index)i++
if (i==9) i--
if(i==21 || i==22) i=20
return vbChr(96+i)
}
function pinyin(s){
var i,s2=''
for (i=0i<s.lengthi++)s2+=(getPinYin(0-vbAsc(s.charAt(i))))
return s2
}
document.writeln(pinyin('中华人民共和国'))
</script>
我马上要到我的空间发表一篇显示完整拼音的文章,请多指教。
那个是VBscript的函数,js里面没有获取GB2312编码的函数,需要自己整一个。GB2312里面的7k多个汉字是按照拼音排序的,后来扩充的汉字并没有按照拼音排序,(为了不打乱已经排好的GB2312编码表),所以要准确获取拼音最好还是用词库来比对。
这里有比较好的例子:
http://www.cssrain.cn/demo/pinyin/lukin/Pinyin.html
自己改写一下就可以。
如果要搞好那个函数,需要把编码转换为ansi编码,网上有很多这里函数。
复杂的汉字确实不能找到正确的拼音,只适用简单的汉字GB2312里的。
改写如下:
先去http://www.cftea.com/c/2009/04/3T7WXDO9S9VFBXH3.asp 里弄两个函数来:字数超过限制就不贴这两个函数了。自己去下载一下:
function UnicodeChr()
function AnsicodeChr()
var s='拼音转换'
alert( getPY_str(s) )
function getPY_str(str){
var py_str=''
for ( var i=0i < str.length i++)
{
py_str +=getPY(str.substr(i,1))
}
return py_str
}
function ansi(c){
return UnicodeToAnsi(c.charCodeAt(0))
}
function UnicodeToAnsi(chrCode)
{
var chrHex=chrCode.toString(16)
chrHex="000"+chrHex.toUpperCase()
chrHex=chrHex.substr(chrHex.length-4)
var i=UnicodeChr().indexOf(chrHex)
if(i!=-1)
{
chrHex=AnsicodeChr().substr(i,4)
}
return parseInt(chrHex,16)
}
function getPY(ch)
{
if(ch !='') {
var code = ansi(ch)
var py = ''
if(code>=45217 &&code<=45252) {
py = "A"
} else if(code>=45253 &&code<=45760) {
py = "B"
} else if(code>=45761 &&code<=46317) {
py = "C"
} else if(code>=46318 &&code<=46825) {
py = "D"
} else if(code>=46826 &&code<=47009) {
py = "E"
} else if(code>=47010 &&code<=47296) {
py = "F"
} else if((code>=47297 &&code<=47613) || (code == 63193)) {
py = "G"
} else if(code>=47614 &&code<=48118) {
py = "H"
} else if(code>=48119 &&code<=49061) {
py = "J"
} else if(code>=49062 &&code<=49323) {
py = "K"
} else if(code>=49324 &&code<=49895) {
py = "L"
} else if(code>=49896 &&code<=50370) {
py = "M"
} else if(code>=50371 &&code<=50613) {
py = "N"
} else if(code>=50614 &&code<=50621) {
py = "O"
} else if(code>=50622 &&code<=50905) {
py = "P"
} else if(code>=50906 &&code<=51386) {
py = "Q"
} else if(code>=51387 &&code<=51445) {
py = "R"
} else if(code>=51446 &&code<=52217) {
py = "S"
} else if(code>=52218 &&code<=52697) {
py = "T"
} else if(code>=52698 &&code<=52979) {
py = "W"
} else if(code>=52980 &&code<=53688) {
py = "X"
} else if(code>=53689 &&code<=54480) {
py = "Y"
} else if(code>=54481 &&code<=62289) {
py = "Z"
} else {
py =ch
}
return py
}else{
return ''
}
}