国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Javascript下的urlencode編碼解碼方法附decodeURIComponent

2019-11-21 00:33:29
字體:
來源:轉載
供稿:網友
關于在ASP(Server.UrlEncode)、PHP(urlencode())函數編碼結果,或是經過asp、php等動態語言直接寫入COOKIES的中文字符,用JS讀取的時候,都會碰到一個編碼的問題,那就是最終字符串被urlencode編碼了,而又時有需要從JS在客戶端去讀取這些數據。

而本文,就大概說說如何在js中通過系統自帶的函數去解決這個問題。

而相信碰到過此問題的朋友應該都有所了解,目前網絡上流行一些js下的自定義函數去解決這個問題,如說vbscript(URLDecode())、javascript(UrlDecode())等。而這兩個函數,都無法很好的與asp(Server.UrlEncode)、php(urlencode())這兩個函數相互通訊。
關于vbscript(function URLDecode())、javascript(function UrlDecode())在本文最后也會轉載出來。

而本文的主角就是javascript(UrlDecodedecodeURIComponent()),這個函數名稱實在太常了,個人真的不太了解,畢竟js的系統函數很多,很容易遺漏。煩惱在偶然間發現了這個函數!

編碼函數:encodeURIComponent()
解碼函數:decodeURIComponent()
decodeURIComponent()語法
復制代碼 代碼如下:

decodeURIComponent(URIstring)
參 數:(URIstring)必需。一個字符串,含有編碼 URI 組件或其他要解碼的文本。
返回值:URIstring 的副本,其中的十六進制轉義序列將被它們表示的字符替換。

實例:
復制代碼 代碼如下:

<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>


結果:
復制代碼 代碼如下:

編碼(原=煩惱):%E7%83%A6%E6%81%BC
解碼(原=%E7%83%A6%E6%81%BC):煩惱


注意:本文只在UTF-8編碼環境下測試。因為在不同編碼環境下,asp(Server.UrlEncode)所編譯后的代碼好像不同,有待測試!
附轉載:
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())其實還是柔和使用了vbscript,好像在javascript環境中,對于asc、hex、chr相關的轉換,如 str.charCodeAt(0).toString(16) 及 String.fromCharCode(str) 在不同編碼下,對于中文的編碼結果還不統一。
比如: 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進制轉的61 轉到 10進制就是 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需刷新才能執行]
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 喀喇沁旗| 长沙县| 高雄市| 朝阳市| 临桂县| 连江县| 滁州市| 九寨沟县| 繁昌县| 南投县| 太保市| 平谷区| 阿坝| 贵德县| 铜川市| 昌乐县| 策勒县| 绥芬河市| 延安市| 上高县| 华蓥市| 澄江县| 云霄县| 营口市| 黔西县| 兴安县| 锦州市| 无棣县| 施甸县| 拉萨市| 临武县| 松阳县| 大化| 盐源县| 宝兴县| 黔江区| 普格县| 东阿县| 汉沽区| 玉门市| 盐亭县|