在設定URL參數時編碼特殊字符
P粉348915572
P粉348915572 2023-08-17 11:25:49
0
2
473
<p>我需要設定一些URL參數,其中還需要包含一個特殊字元<code>$</code></p> <p>目前我正在使用<code>.set()</code>來建立和設定這些參數的值:</p> <pre class="brush:php;toolbar:false;">const myUrl = new URL("http://www.example.com/?"); let params = new URLSearchParams(); params.set('$param1', '60'); params.set('$param2', '100');</pre> <p>我知道我需要使用<code>encodeURI()</code>來確保在URL中得到<code>$</code>而不是<code>$</code> -但是在哪個階段我該這麼做呢? </p> <p>如果我在將參數轉換為字串並將其添加到URL時進行這樣的操作,它們已經被轉換了。 </p> <pre class="brush:php;toolbar:false;">myUrl.search = encodeURI(params.toString()); // 輸出:http://www.example.com/?$param1=60&$param2=100 // 期望:http://www.example.com/?$param1=60&$param2=100</pre> <p><br /></p>
P粉348915572
P粉348915572

全部回覆(2)
P粉147747637

由於您需要它且您的伺服器支援它,只需在最後修復它

const myUrl = new URL("http://www.example.com/?");

let params = myUrl.searchParams;
params.set('$param1', '60');
params.set('$param2', '100');

console.log(myUrl.toString().replace(/%24/g,"$"))
P粉986028039

在您的情況下,$字元被編碼為$,因為它是URL中的保留字元。 URLSearchParams物件的set方法會自動對這些字元進行編碼,以確保產生的字串是有效的URL。

然而,如果您想按原樣包含$字符,您可以透過手動建立查詢字串來繞過自動編碼:

const myUrl = new URL("http://www.example.com/?");

let params = ['$param1=60', '$param2=100'].join('&');

myUrl.search = params;

console.log(myUrl.toString());
// 输出:http://www.example.com/?$param1=60&$param2=100

這將給您所需的輸出,但請注意,根據URL規範,這可能不是一個有效的URL,因為$是一個保留字元。這可能會導致某些伺服器或API出現問題。

如果您控制您正在與之互動的伺服器或API,並且您確信它可以處理查詢字串中帶有$字元的URL,則此方法應該有效。否則,通常最安全的做法是使用URLSearchParams提供的自動編碼。

請確認此解決方案是否對您有效,或是否需要進一步協助。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板