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

首頁 > 語言 > JavaScript > 正文

js中編碼函數:escape,encodeURI與encodeURIComponent詳解

2024-05-06 15:19:33
字體:
來源:轉載
供稿:網友

1、eacape(): 該方法不會對 ASCII 字母和數字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼: * @ - _ + . / 。其他所有的字符都會被轉義序列替換。其它情況下escape,encodeURI,encodeURIComponent編碼結果相同。

   escape對0-255以外的unicode值進行編碼時輸出%u****格式

   可以使用 unescape() 對 escape() 編碼的字符串進行解碼。

   ECMAScript v3 反對使用該方法,應用使用 decodeURI() 和 decodeURIComponent() 替代它。

2、encodeURI 和 encodeURIComponent

encodeURI 和 encodeURIComponent都是ECMA-262標準中定義的函數,所有兼容這個標準的語言(如JavaScript, ActionScript)都會實現這兩個函數。它們都是用來對URI (RFC-2396)字符串進行編碼的全局函數,但是它們的處理方式和使用場景有所不同。為了解釋它們的不同,我們首先需要理解RFC-2396中對于 URI中的字符分類:

1>保留字符(reserved characters):這類字符是URI中的保留關鍵字符,它們用于分割URI中的各個部分。這些字符是:";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","

2>Mark字符(mark characters):這類字符在RFC-2396中特別定義,但是沒有特別說明用途,可能是和別的RFC標準相關。 這些字符是:"-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"

3>基本字符(alphanum characters):這類字符是URI中的主體部分,它包括所有的大寫字母、小寫字母和數字。

在介紹完上面三類字符串后,我們就非常容易來解釋encodeURI和encodeURIComponent函數的不同之處了:

encodeURI: 該函數對傳入字符串中的所有非(基本字符、Mark字符和保留字符)進行轉義編碼(escaping)。所有的需要轉義的字符都按照UTF-8編碼轉化成 為一個、兩個或者三個字節的十六進制轉義字符(%xx)。例如,字符空格" "轉換成為"%20"。在這種編碼模式下面,需要編碼的ASCII字符用一個字節轉義字符代替,在/u0080和/u007ff之間的字符用兩個字節轉義字符代替,其他16為Unicode字符用三個字節轉義字符代替。

encodeURIComponent: 該函數處理方式和encodeURI只有一個不同點,那就是對于保留字符同樣做轉義編碼。這樣url中的參數和值才不會被#等特殊字符截斷。 比如:http://localhost:8080/xss/XssServlet?username=A&T Plastic,該url,后臺的代碼:

String username = request.getParameter("username");

獲得的username值為A,而不是我們希望的 A&T Plastic。因為 username=A&T Plastic,其中含有了保留字符&,并且沒有進行編碼,所以username的值被其給截斷了。所以正確的做法是,對其進行編碼:encodeURIComponent("A&T Plastic") == A%26T%20Plastic,然后將上面的連接改為:

http://localhost:8080/xss/XssServlet?username=A%26T%20Plastic,后臺才能獲得正確的值:username==A&T Plastic。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 青岛市| 土默特右旗| 岳西县| 浮梁县| 凯里市| 旌德县| 桐柏县| 鹿邑县| 杭州市| 三门县| 甘肃省| 桐庐县| 石屏县| 铅山县| 丹阳市| 高阳县| 临泽县| 宁陵县| 昌宁县| 高陵县| 疏附县| 五河县| 达日县| 团风县| 江陵县| 泉州市| 凭祥市| 上蔡县| 交城县| 苍溪县| 天祝| 景德镇市| 钟山县| 襄樊市| 共和县| 九寨沟县| 常德市| 松阳县| 威远县| 徐汇区| 大悟县|