URI(統一資源標識符)是用來標識互聯網上資源的字符串文本標識符,是訪問互聯網資源的地址。在將URI傳送到服務器或瀏覽器時,需要進行特定編碼處理,這個編碼方式就是URI編碼規則。
一、URI編碼規則的概述
URI是由多個部分組成的,其中可能包含不安全的字符,如空格、中文、特殊符號等,這些字符在傳輸過程中可能會被無法正確解析,造成混淆或錯誤。為了解決這個問題,URI需要使用編碼來保證傳輸正確性。
在URI編碼中,不安全字符被替換為一系列%AB這樣的編碼。其中AB代表字符在ASCII中的十六進制表示。通過這種方式,任何字符都可以被正確傳輸。
二、URI編碼規則的分類
URI編碼規則可以分為兩類:百分號編碼和URL編碼。
1、百分號編碼
百分號編碼是最基本的URI編碼規則,通過將不安全字符替換為百分號(%)和兩位十六進制數,來表示ASCII碼下的字符。比如空格的百分號編碼為「%20」,中文「我」的百分號編碼為「%E6%88%91」。
//示例代碼 const encodeUrl = encodeURIComponent('http://mywebsite.com/dir/page.html?name=龍a 離子&age=18'); console.log(encodeUrl); // 'http%3A%2F%2Fmywebsite.com%2Fdir%2Fpage.html%3Fname%3D%E9%BE%99a%20%E7%A6%BB%E5%AD%90%26age%3D18'
2、URL編碼
URL編碼是對百分號編碼的一種補充,用於特殊字符的編碼。URL編碼使用%XX來表示特殊字符的ASCII碼值,其中XX為兩位十六進制數。與百分號編碼的區別在於,URL編碼允許部分不安全字符不使用百分號編碼,而是使用可讀性更好的字符串替換。
//示例代碼 const encodeURI = encodeURI('http://mywebsite.com/dir/page.html?name=龍a 離子&age=18'); const encodeUrl = encodeURIComponent('http://mywebsite.com/dir/page.html?name=龍a 離子&age=18'); console.log(encodeURI); // 'http://mywebsite.com/dir/page.html?name=%E9%BE%99a%20%E7%A6%BB%E5%AD%90&age=18' console.log(encodeUrl); // 'http%3A%2F%2Fmywebsite.com%2Fdir%2Fpage.html%3Fname%3D%E9%BE%99a%20%E7%A6%BB%E5%AD%90%26age%3D18'
三、URI編碼規則的使用
URI編碼規則在網絡編程中非常重要,應用廣泛。常見的應用場景包括:
1、URL請求參數編碼
在使用GET方式請求URL時,需要對請求參數進行URI編碼,以確保參數正確傳輸和解析。在使用XHR請求時,可以使用encodeURIComponent()函數對參數進行編碼。
//示例代碼 const xhr = new XMLHttpRequest(); const url = 'http://mywebsite.com/page?name=' + encodeURIComponent('龍a 離子') + '&age=18'; xhr.open('GET', url, true); xhr.send();
2、URI中文本編碼
在某些場景下,需要將URI中的中文轉換為Unicode編碼,以確保URI在各個平台和瀏覽器上的正確性。可以使用encodeURI()函數對URI進行編碼。
//示例代碼 const url = 'http://mywebsite.com/page?name=' + encodeURI('龍a 離子') + '&age=18'; console.log(url); // 'http://mywebsite.com/page?name=%E9%BE%99a%20%E7%A6%BB%E5%AD%90&age=18'
3、URI字母大小寫
在URI中,字母大小寫是有意義的,因此應該保持URI的大小寫統一和正確。一般情況下,URI的協議部分應該使用小寫。
//示例代碼 const url = 'HTTP://MYWEBSITE.COM/PAGE'; console.log(url.toLowerCase()); // 'http://mywebsite.com/page'
四、總結
URI編碼規則是網絡編程中不可或缺的一部分,在GET方式請求URL和URI中文本編碼時尤為重要。在實際開發中,應根據具體需求和環境選擇合適的編碼方式,保證URI在傳輸和解析中的正確性。
原創文章,作者:RBRTI,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/374926.html