用JavaScript实现UrlEncode和UrlDecode
Submitted by admin on 2005, November 17, 1:34 PM. 脚本相关
<script language="vbscript">
/*利用VBScript构建asc吗和字符串的互转函数*/
Function str2asc(strstr)
str2asc = hex(asc(strstr))
End Function
Function asc2str(ascasc)
asc2str = chr(ascasc)
End Function
</script>
<script language="javascript">
/*这里开始时UrlEncode和UrlDecode函数*/
function UrlEncode(str){
var ret="";
var strSpecial="!"#$%&'()*+,/:;<=>?[]^`{|}~%";
for(var i=0;i<str.length;i++){
var chr = str.charAt(i);
var c=str2asc(chr);
tt += chr+":"+c+"n";
if(parseInt("0x"+c) > 0x7f){
ret+="%"+c.slice(0,2)+"%"+c.slice(-2);
}else{
if(chr==" ")
ret+="+";
else if(strSpecial.indexOf(chr)!=-1)
ret+="%"+c.toString(16);
else
ret+=chr;
}
}
return ret;
}
function UrlDecode(str){
var ret="";
for(var i=0;i<str.length;i++){
var chr = str.charAt(i);
if(chr == "+"){
ret+=" ";
}else if(chr=="%"){
var asc = str.substring(i+1,i+3);
if(parseInt("0x"+asc)>0x7f){
ret+=asc2str(parseInt("0x"+asc+str.substring(i+4,i+6)));
i+=5;
}else{
ret+=asc2str(parseInt("0x"+asc));
i+=2;
}
}else{
ret+= chr;
}
}
return ret;
}
</script>
Tags: javascript
« 上一篇 | 下一篇 »
只显示10条记录相关文章
Trackbacks
6条记录访客评论
英文字符(不包括特殊字符:? /{}等)可以进行编码、也可以可以不必编码,所以没有更正确一说!
Post by moocky on 2006, June 28, 10:50 AM
#1
我这个好像还要正确一些哦:
function urlencode(str)
tmp=""
strSpecial="_-.1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i=1 to len(str)
crt=mid(str,i,1)
if instr(1,strSpecial,crt,1) then
tmp=tmp&crt
else
hexc=hex(asc(crt))
tmp=tmp&"%"& mid(hexc,1,2)
if len(hexc)>2 then
tmp=tmp&"%"& mid(hexc,3,2)
end if
end if
next
urlencode=tmp
end function
我和php比较过,是一样的哈
Post by leinchu on 2006, June 28, 10:49 AM
#2
哈哈,多谢两位兄弟,之所以用了VBScript是因为不知道如果通过javascript获得汉字的ASCII码,而不完全适用VBScript是因为对VBScript不是很熟悉,懒得再查VBScript函数的用法了。不好意思偷了个懒,有空的时候我会把它完善一下。
Post by moocky on 2006, June 28, 10:48 AM
#3
如果用vbscript才可以实现ascii 2 str/str 2 ascii,为什么不直接用vbscript来实现全部呢?!这样javacript和vbscript混用似乎不是太完美。
<script language="vbscript">
function urlencode(vstrin)
dim i,strreturn,strSpecial
strSpecial = " <>""#%{}|^~[]`'&?+"
strreturn = ""
for i = 1 to len(vstrin)
thischr = mid(vstrin,i,1)
if abs(asc(thischr)) < &hff then
if instr(strSpecial,thischr)>0 then
strreturn = strreturn & "%" & hex(asc(thischr))
else
strreturn = strreturn & thischr
end if
else
innercode = asc(thischr)
if innercode < 0 then
innercode = innercode + &h10000
end if
hight8 = innercode '(innercode and &hff00)' mod &hff
low8 = innercode and &hff
strreturn = strreturn & "%" & hex(hight8) & "%" & hex(low8)
end if
next
urlencoding = strreturn
end function
document.write(urlencode("中文 <>""#%{}|^~[]`'&?+Abc")+"<br>")
</script>
Post by masuz on 2006, June 28, 10:48 AM
#4
真巧,我也写了一篇相关的文章,如果这个代码使用更全面的utf8算法就更完美了:D http://www.cublog.cn/u/12425/showart.php?id=75879
你的手册子站里面的文章很不错,多谢了
Post by dulao5 on 2006, June 28, 10:47 AM
#5
老大,真的太好了,我找了好久了。
Post by js on 2006, June 28, 10:47 AM
#6
发表评论