Javascript下的urlencode編碼解碼方法附decodeURIComponent
而本文,就大概說(shuō)說(shuō)如何在js中通過(guò)系統(tǒng)自帶的函數(shù)去解決這個(gè)問(wèn)題。
而相信碰到過(guò)此問(wèn)題的朋友應(yīng)該都有所了解,目前網(wǎng)絡(luò)上流行一些js下的自定義函數(shù)去解決這個(gè)問(wèn)題,如說(shuō)vbscript(URLDecode())、javascript(UrlDecode())等。而這兩個(gè)函數(shù),都無(wú)法很好的與asp(Server.UrlEncode)、php(urlencode())這兩個(gè)函數(shù)相互通訊。
關(guān)于vbscript(function URLDecode())、javascript(function UrlDecode())在本文最后也會(huì)轉(zhuǎn)載出來(lái)。
而本文的主角就是javascript(UrlDecodedecodeURIComponent()),這個(gè)函數(shù)名稱實(shí)在太常了,個(gè)人真的不太了解,畢竟js的系統(tǒng)函數(shù)很多,很容易遺漏。煩惱在偶然間發(fā)現(xiàn)了這個(gè)函數(shù)!
編碼函數(shù):encodeURIComponent()
解碼函數(shù):decodeURIComponent()
decodeURIComponent()語(yǔ)法
decodeURIComponent(URIstring)
參 數(shù):(URIstring)必需。一個(gè)字符串,含有編碼 URI 組件或其他要解碼的文本。
返回值:URIstring 的副本,其中的十六進(jìn)制轉(zhuǎn)義序列將被它們表示的字符替換。
實(shí)例:
<script type="text/javascript">
var test1="煩惱";
var test2="%E7%83%A6%E6%81%BC";
document.write("編碼(原="+test1+"):"+encodeURIComponent(test1)+ "<br />");
document.write("解碼(原="+test2+"):"+decodeURIComponent(test2));
</script>
結(jié)果:
編碼(原=煩惱):%E7%83%A6%E6%81%BC
解碼(原=%E7%83%A6%E6%81%BC):煩惱
注意:本文只在UTF-8編碼環(huán)境下測(cè)試。因?yàn)樵诓煌幋a環(huán)境下,asp(Server.UrlEncode)所編譯后的代碼好像不同,有待測(cè)試!
附轉(zhuǎn)載:
vbscript(function URLDecode())
<script type="text/VBscript">
<!--
Function URLDecode(enStr)
dim deStr,strSpecial
dim c,i,v
deStr=""
strSpecial="!""#$%&'()*+,.-_/:;<=>?@[\]^`{|}~%"
for i=1 to len(enStr)
c=Mid(enStr,i,1)
if c="%" then
v=eval("&h"+Mid(enStr,i+1,2))
if inStr(strSpecial,chr(v))>0 then
deStr=deStr&chr(v)
i=i+2
else
v=eval("&h"+ Mid(enStr,i+1,2) + Mid(enStr,i+4,2))
deStr=deStr & chr(v)
i=i+5
end if
else
if c="+" then
deStr=deStr&" "
else
deStr=deStr&c
end if
end if
next
URLDecode=deStr
End function
//-->
</script>
javascript(function UrlDecode())其實(shí)還是柔和使用了vbscript,好像在javascript環(huán)境中,對(duì)于asc、hex、chr相關(guān)的轉(zhuǎn)換,如 str.charCodeAt(0).toString(16) 及 String.fromCharCode(str) 在不同編碼下,對(duì)于中文的編碼結(jié)果還不統(tǒng)一。
比如: vbscript str2asc/asc2str
<script type="text/vbscript">
Function str2asc(strstr)
str2asc = hex(asc(strstr))
End Function
Function asc2str(ascasc)
asc2str = chr(ascasc)
End Function
MsgBox str2asc("a")
MsgBox asc2str("&H61")'16進(jìn)制轉(zhuǎn)的61 轉(zhuǎn)到 10進(jìn)制就是 97
</script>
javascript str2asc/asc2str
<script type="text/javascript">
function str2asc(str){
return str.charCodeAt(0).toString(16);
}
function asc2str(str){
return String.fromCharCode(str);
}
alert(str2asc("a"));//
alert(asc2str("0x61"));//
</script>
演示:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
相關(guān)文章
CocosCreator入門(mén)教程之網(wǎng)絡(luò)通信
這篇文章主要介紹了CocosCreator的網(wǎng)絡(luò)通信,內(nèi)容不多,涉及到的細(xì)節(jié),讀者可以根據(jù)實(shí)際情況,自己去延申2021-04-04javascript設(shè)計(jì)模式 – 中介者模式原理與用法實(shí)例分析
這篇文章主要介紹了javascript設(shè)計(jì)模式 – 中介者模式,結(jié)合實(shí)例形式分析了javascript中介者模式基本概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04bootstrap中的導(dǎo)航條實(shí)例代碼詳解
本文通過(guò)實(shí)例代碼給大家介紹了bootstrap中的導(dǎo)航條,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05clientX,pageX,offsetX,x,layerX,screenX,offsetLeft區(qū)別分析
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft區(qū)別分析,需要的朋友可以參考下。2010-03-03Chart.js 輕量級(jí)HTML5圖表繪制工具庫(kù)(知識(shí)整理)
這篇文章主要介紹了Chart.js 輕量級(jí)HTML5圖表繪制工具庫(kù),Chart.js基于HTML5 canvas技術(shù)支持所有現(xiàn)代瀏覽器,并且針對(duì)IE7/8提供了降級(jí)替代方案,感興趣的小伙伴們可以參考一下2018-05-05bootstrap-treeview實(shí)現(xiàn)多級(jí)樹(shù)形菜單 后臺(tái)JSON格式如何組織?
這篇文章主要介紹了bootstrap-treeview實(shí)現(xiàn)多級(jí)樹(shù)形菜單,后臺(tái)JSON格式如何組織,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07es6 super關(guān)鍵字的理解與應(yīng)用實(shí)例分析
這篇文章主要介紹了es6 super關(guān)鍵字的理解與應(yīng)用,結(jié)合實(shí)例形式分析了es6 super關(guān)鍵字的功能、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-02-02