1. 程式人生 > >javascript中對編碼的解讀

javascript中對編碼的解讀

url跳轉 ole api js使用 [1] this $.ajax mode sport

首先來一下js知識的鞏固與復習

js對文字進行編碼涉及3個函數:escape,encodeURI,encodeURIComponent,相應3個解碼函數:unescape,decodeURI,decodeURIComponent

1、 傳遞參數時需要使用encodeURIComponent,這樣組合的url才不會被#等特殊字符截斷。

例如:<script language="javascript">document.write(‘<a href="http://passport.baidu.com/?logout&aid=7&u=‘+encodeURIComponent("http://cang.baidu.com/bruce42")+‘">退出</a>‘);</script>

2、 進行url跳轉時可以整體使用encodeURI

例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");

3、 js使用數據時可以使用escape

例如:搜藏中history紀錄。

4、 escape對0-255以外的unicode值進行編碼時輸出%u****格式,其它情況下escape,encodeURI,encodeURIComponent編碼結果相同。

javascript對URL中的參數進行簡單加密處理

javascript的api本來就支持Base64,因此我們可以很方便的來進行編碼和解碼。

var encodeData = window.btoa("name=xiaoming&age=10")//編碼

var decodeData = window.atob(encodeData)//解碼。

例子:

var encodedData = window.btoa("Hello, world"); // 編碼
var decodedData = window.atob(encodedData); // 解碼

在各瀏覽器中,使用 window.btoa 對Unicode字符串進行編碼都會觸發一個字符越界的異常.

先把Unicode字符串轉換為UTF-8編碼,可以解決這個問題, 代碼來自Johan Sundstr?m:

function utf8_to_b64( str ) {
    return window.btoa(unescape(encodeURIComponent( str )));
}

function b64_to_utf8( str ) {
    return decodeURIComponent(escape(window.atob( str )));
}

// Usage:
utf8_to_b64(‘? à la mode‘); // "4pyTIMOgIGxhIG1vZGU="
b64_to_utf8(‘4pyTIMOgIGxhIG1vZGU=‘); // "? à la mode"
//譯者註:在js引擎內部,encodeURIComponent(str)相當於escape(unicodeToUTF8(str))
//所以可以推導出unicodeToUTF8(str)等同於unescape(encodeURIComponent(str))
//example

$(function () {
$(".edit-btn").on("click",function () {
var policyNo=$(this).parents(".t-r").find(".policy-no").text();
var holderName=$(this).parents(".t-r").find(".holder-name").text();
// $.ajax({
// url:"/reviseService/revise/reviseOption/"+policyNo+"/"+holderName+"",
// type:"POST",
// success:function () {
// window.location.href();
// }
// })
// window.open("/reviseService/revise/reviseOption/"+policyNo+"/"+holderName+"");
// window.open(encodeURIComponent("/reviseService/revise/reviseOption/"+window.btoa(policyNo+"/"+holderName+"")));
window.open("/reviseService/revise/reviseOption/"+ window.btoa(unescape(encodeURIComponent(policyNo+"/"+holderName+""))+""));
})
})

//例子

var url="http://localhost:8080/reviseService/revise/reviseOption/NkRZSUwxNzA1SkswMjAwMTE3MDAwMDA0OS/lvKDlhas=";

var uu=url.split("reviseOption/")[1];
console.log(uu);//NkRZSUwxNzA1SkswMjAwMTE3MDAwMDA0OS/lvKDlhas=

function b64_to_utf8(str) {
return decodeURIComponent(escape(window.atob(str)));
}
var aa=b64_to_utf8(uu);
console.log(aa);//6DYIL1705JK02001170000049/張八
var cc=aa.split("/");
console.log(cc);//["6DYIL1705JK02001170000049", "張八"]

  

 
參考文檔:http://www.cnblogs.com/fishtreeyu/archive/2011/02/27/1966178.html
https://developer.mozilla.org/zh-CN/docs/Web/API/WindowBase64/btoa
http://www.cnblogs.com/xiao-lei/p/6064134.html
http://www.cnblogs.com/fishtreeyu/archive/2011/02/27/1966178.html

javascript中對編碼的解讀