在設定 a 的路徑名URL時,您應該何時對要設定的值進行編碼?
當我說URL我的意思是這個 API 時:https ://developer.mozilla.org/en-US/docs/Web/API/URL
當我說“設定路徑名”時,我的意思是這樣做:
url.pathname = 'some/path/to/a/resource.html';
根據 MDN 檔案,我認為答案是“你不應該這樣做”,因為有一個例子涵蓋了這種情況:
URL 根據 RFC 3986 中的規則進行編碼。例如:
url.pathname = 'démonstration.html'; console.log(url.href); // "http://www.example.com/démonstration.html"
但是,我遇到了一種情況,似乎我確實需要將我設定的值編碼pathname為:
url.pathname = 'atest/New Folder1234/!@#$%^&*().html';
console.log(url.href);
我希望這會輸出:
http://example.com/atest/New Folder1234/!@#$%^&*().html
但相反,我得到:
https://example.com/atest/New Folder1234/!@#$%^&*().html
它似乎得到了我期望我必須做的事情:
url.pathname = 'atest/New Folder1234/!@#$%^&*()'.split('/').map(encodeURIComponent).join('/')
這里發生了什么?我在 MDN 檔案頁面上找不到任何URL或pathname解釋這一點的任何內容。我快速瀏覽了 RFC 3986,但這似乎只是描述了 URI 語法。我已經進行了一些實驗,試圖找到解決這個問題的某種模式,但對我來說沒有什么特別突出的。
uj5u.com熱心網友回復:
請參閱path state的規范,特別是...
UTF-8 percent-encode c 使用路徑 percent-encode 集并將結果附加到緩沖區。
路徑百分比編碼集被定義為...
查詢百分比編碼集和 U 003F (?)、U 0060 (`)、U 007B ({) 和 U 007D (})。
并且查詢百分比編碼集是......
C0 控制百分比編碼集和 U 0020 SPACE 、U 0022 (")、U 0023 (#)、U 003C (<) 和 U 003E (>)。
如果你愿意,你可以繼續潛入兔子洞,但我覺得這就足夠了
請注意,這些集合都不包括@$%^&您指出的字符。
將這些與更徹底的Encode規范進行比較。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/425890.html
標籤:javascript 网址 小路 网址代码 编码成分
