JS(Unicode->GB)的精簡版(仍含拼音和UrlEncode) (轉)

worldblog發表於2007-12-12
JS(Unicode->GB)的精簡版(仍含拼音和UrlEncode) (轉)[@more@]

/Develop/read_article.?id=15043">
用的Unicode和GB的轉換庫如下地址
a.com/user/qswh/qswhU2GB.js">
148k的js,本地測試沒有問題,但擱到網上就會覺得有點慢了

所以需要一個精簡版,採錄的只是GB2312編碼,即部分GBK,但夠用即可
這次特別精簡了程式碼,但功能不變,區別只是該版只能作用於常見漢字。
什麼馬配什麼鞍,也修改了UrlEncode和getSpell的演算法,請大家不要混淆。
這次qswhGB2312.js只有18k,可在網上隨意使用

Unicode和GB的轉換庫和UrlEncode和getSpell,請

主要程式碼如下
var strGB="啊阿...鼾齄";//GB2312的字串,略
var qswhSpell=["a",0,..,"zuo",3747];//拼音的對照表,略
function UrlEncode(str){
 var i,c,p,q,ret="",strSpecial="!"#$%&'()*+,/:;<=>?@[]^`{|}~%";
 for(i=0;i if(str.charCodeAt(i)>=0x4e00){
 var p=strGB.indexOf(str.charAt(i));
 if(p>=0){
 q=p%94;
 p=(p-q)/94;
 ret+=("%"+(0xB0+p).toString(16)+"%"+(0xA1+q).toString(16)).toUpperCase();
 }
 }
 else{
 c=str.charAt(i);
 if(c==" ")
 ret+="+";
 else if(strSpecial.indexOf(c)!=-1)
 ret+="%"+str.charCodeAt(i).toString(16);
 else
 ret+=c;
 }
 }
 return ret;
}

function getSpell(str,sp){
 var i,c,t,p,ret="";
 if(sp==null)sp="";
 for(i=0;i if(str.charCodeAt(i)>=0x4e00){
 p=strGB.indexOf(str.charAt(i));
 if(p>-1&&p<3755){
 for(t=qswhSpell.length-1;t>0;t=t-2)if(qswhSpell[t]<=p)break;
 if(t>0)ret+=qswhSpell[t-1]+sp;
 }
 }
 }
 return ret.substr(0,ret.length-sp.length);
}

sp是分隔符,範例如下



ps.該文章現僅限在csdn文件中心,如要轉載,請和作者聯絡,否則後果自負。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991774/,如需轉載,請註明出處,否則將追究法律責任。

相關文章