在設定URL參數時編碼特殊字符
P粉348915572
2023-08-17 11:25:49
<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>
由於您需要它且您的伺服器支援它,只需在最後修復它
在您的情況下,
$
字元被編碼為$
,因為它是URL中的保留字元。URLSearchParams
物件的set
方法會自動對這些字元進行編碼,以確保產生的字串是有效的URL。然而,如果您想按原樣包含
$
字符,您可以透過手動建立查詢字串來繞過自動編碼:這將給您所需的輸出,但請注意,根據URL規範,這可能不是一個有效的URL,因為
$
是一個保留字元。這可能會導致某些伺服器或API出現問題。如果您控制您正在與之互動的伺服器或API,並且您確信它可以處理查詢字串中帶有
$
字元的URL,則此方法應該有效。否則,通常最安全的做法是使用URLSearchParams
提供的自動編碼。請確認此解決方案是否對您有效,或是否需要進一步協助。