首頁  >  問答  >  主體

在設定URL參數時編碼特殊字符

<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粉348915572P粉348915572430 天前421

全部回覆(2)我來回復

  • P粉147747637

    P粉1477476372023-08-18 09:43:27

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

    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,"$"))

    回覆
    0
  • P粉986028039

    P粉9860280392023-08-18 09:07:27

    在您的情況下,$字元被編碼為$,因為它是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提供的自動編碼。

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

    回覆
    0
  • 取消回覆