搜尋
首頁web前端js教程了解空格的編碼方式:%withencodeURI 與 withURL

您可以使用encodeURI 或URL 對查詢字串進行編碼。最近,我注意到 URL 對空格的編碼不同。我將討論為什麼他們以不同的方式處理編碼。在深入討論主題之前,我將向您展示如何使用每種方法進行編碼。


用法

1. 編碼URI

// 'https://www.google.com/search?q=programming%20language'
encodeURI('https://www.google.com/search?q=programming language')

您可以使用encodeURI 函數對URI 進行編碼。然而,。它不會對屬於 URI 有效部分的部分字元進行編碼,因此您可能需要使用encodeURIComponent 函數來正確編碼查詢字串或 URI 中的其他元件。

例如,假設您有一個值為
的查詢字串 q https://www.google.com/search?q=& 是什麼意思? .

// 'https://www.google.com/search?q=what%20is%20the%20meaning%20of%20&?'
encodeURI('https://www.google.com/search?q=what is the meaning of &?')

Understanding How Spaces Are Encoded: %with encodeURI vs.   with URL

&(& 符號)未依應有的方式轉換為 &。因為 &(& 符號) 可以是 URI 的有效部分。因此,對查詢字串使用encodeURIComponent 總是更安全。

const url = encodeURI('https://google.com/search');
const queryString = `?q=${encodeURIComponent('what is the meaning of &?')}`;
// 'https://google.com/search?q=what%20is%20the%20meaning%20of%20%26%3F';
url+queryString;

Understanding How Spaces Are Encoded: %with encodeURI vs.   with URL

由於encodeURIX和相關函數將URI視為字串,因此您必須處理特殊字符,例如?和你自己。或者,您可以使用 URL 來簡化流程。


2. 網址

使用 URL 進行編碼時,需要分別處理基本 URL 和查詢字串。

Understanding How Spaces Are Encoded: %with encodeURI vs.   with URL

const url = 'https://www.google.com/search?q=programming language';
// 'https://www.google.com/search?q=programming language'
url.toString();

如果使用 URL 建構函式一次對所有內容進行編碼,如上例所示,查詢字串可能無法正確編碼。

const url = new URL('https://www.google.com/search');
url.searchParams.set('q', 'programming language');
// 'https://www.google.com/search?q=programming+language'
url.toString();

Understanding How Spaces Are Encoded: %with encodeURI vs.   with URL

透過 URL 物件的 searchParams 屬性設定查詢字串,可以設定查詢字串。

在這種情況下,空格將轉換為 .在解釋為什麼會發生這種情況之前,讓我們用另一個查詢字串對其進行測試,看看它如何處理其他特殊字元。

const url = new URL('https://www.google.com/search');
url.searchParams.set('q', 'what is the meaning of &?');
// 'https://www.google.com/search?q=what+is+the+meaning+of+%26%3F'
url.toString();

其他特殊字元如預期編碼。

現在,讓我們深入探討為什麼會出現這些差異。


編碼

1. 編碼URI

encodeURIX 函數依據 RFC2396 進行編碼。 URI 不僅僅是互聯網上的一個位置;它可以引用任何類型的資源。這就是為什麼它被稱為 URI(統一資源標識符)而不是 URL(統一資源定位符)。


2. 網址

URL API 根據 RFC3986 進行編碼,這是更新的 URI 規格。

如果您需要使用encodeURI來實現此行為,請參閱此。 - RF3986 的encodeURIComponent 編碼)。

URLSearchParams 遵循百分比編碼規則進行編碼。根據文檔,它將空格替換為“”。

雖然我在 RFC 中找不到此行為的規範,但 MDN 的encodeURIComponent 文件指出:

對於 application/x-www-form-urlencoded,空格將被 替換,因此人們可能希望在encodeURIComponent() 替換之後再用 .

替換

這解釋了為什麼 URLSearchParams 中的空格被替換為“ ”,因為它遵循 application/x-www-form-urlencoded 標準。

您可能已經注意到,URL 和 URLSearchParams 遵循不同的 RFC。

讓我們來看一些例子。

// 'https://www.google.com/search?q=programming%20language'
encodeURI('https://www.google.com/search?q=programming language')

如圖所示,URL 不對括號和冒號進行編碼,因為它們是 IPv6 位址的一部分。但是,冒號不會被編碼為 :,即使它是查詢字串的一部分。它與百分比編碼表不同。

這表示您需要分別對 URL 和查詢字串進行編碼。

// 'https://www.google.com/search?q=what%20is%20the%20meaning%20of%20&?'
encodeURI('https://www.google.com/search?q=what is the meaning of &?')

Understanding How Spaces Are Encoded: %with encodeURI vs.   with URL

現在,URL 和查詢字串已正確編碼。


結論

encodeURI、encodeURIComponent、URL 和 URLSearchParams 函數各自有不同的用途,您應該根據您的特定需求使用它們。

encodeURI:根據 RFC2396 對 URI 進行編碼。它不會對屬於 URI 有效部分的字元進行編碼。如果您需要根據 RFC3986 對 URI 進行編碼,請參閱此 MDN 文件。

encodeURIComponent:根據 RFC2396 對 URI 的元件進行編碼,例如路徑、片段或查詢字串。它包含未由encodeURI 編碼的字元。

URL:根據 RFC3986 對 Web URL 進行編碼。

URLSearchParams:根據 application/x-www-form-urlencoded 標準對參數進行編碼。

如果需要將(加號)替換為 ,可以手動進行,如下所示:

const url = encodeURI('https://google.com/search');
const queryString = `?q=${encodeURIComponent('what is the meaning of &?')}`;
// 'https://google.com/search?q=what%20is%20the%20meaning%20of%20%26%3F';
url+queryString;

使用 Web 開發、Restful API 或 Web URL 時,URL 是可靠的選擇。此外,它遵循 RFC3986,它比 RFC2396 更新。


希望您覺得這有幫助。

編碼快樂!

以上是了解空格的編碼方式:%withencodeURI 與 withURL的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安裝JavaScript?如何安裝JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

在Quartz中如何在任務開始前發送通知?在Quartz中如何在任務開始前發送通知?Apr 04, 2025 pm 09:24 PM

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?Apr 04, 2025 pm 09:21 PM

在JavaScript中如何獲取原型鏈上函數的參數在JavaScript編程中,理解和操作原型鏈上的函數參數是常見且重要的任�...

微信小程序webview中Vue.js動態style位移失效是什麼原因?微信小程序webview中Vue.js動態style位移失效是什麼原因?Apr 04, 2025 pm 09:18 PM

在微信小程序web-view中使用Vue.js動態style位移失效的原因分析在使用Vue.js...

在Tampermonkey中如何實現對多個鏈接的並發GET請求並依次判斷返回結果?在Tampermonkey中如何實現對多個鏈接的並發GET請求並依次判斷返回結果?Apr 04, 2025 pm 09:15 PM

在Tampermonkey中如何對多個鏈接進行並發GET請求並依次判斷返回結果?在Tampermonkey腳本中,我們經常需要對多個鏈...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器