1. 程式人生 > >js URL編碼 解碼問題 cookies亂碼

js URL編碼 解碼問題 cookies亂碼

asp.net

編碼:

HttpUtility.UrlEncode(fArea,System.Text.Encoding.Default)

解碼:

HttpUtility.UrlDecode(Request.QueryString["f"],Encoding.Default);


js cookies亂碼

escape() 加碼
unescape解碼
Javascript中提供了3對函式用來對Url編碼以得到合法的Url,它們分別是
  1. escape / unescape,
  2. encodeURI / decodeURI
  3. encodeURIComponent / decodeURIComponent。
相容性不同:escape函式是從Javascript1.0的時候就存在了,其他兩個函式是在Javascript1.5才引入的。但是由於Javascript1.5已經非常普及了,所以實際上使用encodeURI和encodeURIComponent並不會有什麼相容性問題。 
對Unicode字元的編碼方式不同:這三個函式對於ASCII字元的編碼方式相同,均是使用百分號+兩位十六進位制字元來表示。但是對於Unicode字元,escape的編碼方式是%uxxxx,其中的xxxx是用來表示unicode字元的4位十六進位制字元。這種方式已經被W3C廢棄了。但是在ECMA-262標準中仍然保留著escape的這種編碼語法。encodeURI和encodeURIComponent則使用UTF-8對非ASCII字元進行編碼,然後再進行百分號編碼。這是RFC推薦的。因此建議儘可能的使用這兩個函式替代escape進行編碼。
適用場合不同:encodeURI被用作對一個完整的URI進行編碼,而encodeURIComponent被用作對URI的一個元件進行編碼。從上面提到的安全字元範圍表格來看,我們會發現,encodeURIComponent編碼的字元範圍要比encodeURI的大。我們上面提到過,保留字元一般是用來分隔URI元件(一個URI可以被切割成多個元件,參考預備知識一節)或者子元件(如URI中查詢引數的分隔符),如:號用於分隔scheme和主機,?號用於分隔主機和路徑。由於encodeURI操縱的物件是一個完整的的URI,這些字元在URI中本來就有特殊用途,因此這些保留字元不會被encodeURI編碼,否則意義就變了。 
元件內部有自己的資料表示格式,但是這些資料內部不能包含有分隔元件的保留字元,否則就會導致整個URI中元件的分隔混亂。因此對於單個元件使用encodeURIComponent,需要編碼的字元就更多了。 

詳細出處參考:http://www.jb51.net/article/29214.htm

escape() 函式可對字串進行編碼,這樣就可以在所有的計算機上讀取該字串。語法escape(string)引數描述string必需。要被轉義或編碼的字串。返回值已編碼的 string 的副本。其中某些字元被替換成了十六進位制的轉義序列。說明該方法不會對 ASCII 字母和數字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。其他所有的字元都會被轉義序列替換。
提示和註釋提示:可以使用 unescape() 對 escape() 編碼的字串進行解碼。註釋:ECMAScript v3 反對使用該方法,應用使用 decodeURI() 和 decodeURIComponent() 替代它。

在本例中,我們將使用 escape() 來編
碼字
符串: <script type="text/javascript"> document.write(escape("Visit W3School!") + "<br />") document.write(escape("?!=()#%&")) </script>