2017-08-01 73 views
15

我有角應用程序,我想通過加號+在查詢字符串,如:角網址加號轉換爲空間

http://localhost:3000/page?name=xyz+manwal 

當我打這個URL其轉換爲:

http://localhost:3000/page?name=xyz%20manwal 

其中指的是空間。我怎樣才能防止這種轉換?

+0

爲什麼你需要嗎? –

+0

我想在'xyz + manwal'中使用名稱值,在給定的URL中保存'xyz manwal'。 – Manwal

+0

它只是一個URL,無論你在哪裏閱讀,它都應該被正確解析爲一個加號,你不能在URL中使用加號。閱讀[本](https://stackoverflow.com/questions/2678551/when-to-encode-space-to-plus-or-20) –

回答

1

我找到了解決方案,並將其發佈供將來參考。 Angular js將+符號轉換爲%2B

下面的代碼防止:

.config([ 
    '$provide', function($provide) { 
     $provide.decorator('$browser', function($delegate) { 
     let superUrl = $delegate.url; 
     $delegate.url = (url, replace) => { 
      if(url !== undefined) { 
      return superUrl(url.replace(/\%2B/g,"+"), replace); 
      } else { 
      return superUrl().replace(/\+/g,"%2B"); 
      } 
     }; 
     return $delegate; 
     }); 
    } 
    ]) 
5

這是一個很常見的問題。您可以在application/x-www-form-urlencoded請求中正常傳遞它。沒有其他請求將能夠正確解析+。他們總是將它解析爲%20而不是%2B。

您需要手動操作查詢參數時,有2種方式:

  • 編碼參數爲64位編碼,這種方式沒有特殊字符可以打破你的應用程序,但你還需要處理它在接收部分(解碼)。
  • 一個簡單的解決方案是,在擊中URL之前,用%2B替換所有的+號。通過這種方式,另一方將能夠正常解碼,而不需要特殊的例程。

欲瞭解更多信息,你應該reffer到HTHE以下堆棧溢出問題Android: howto parse URL String with spaces to URI object?URL encoding the space character: + or %20?

7

這1A中常見的問題。該URL使用+字符來分隔兩個單詞。爲了在參數值中使用+字符,需要在將參數值作爲URL的一部分添加之前對其進行編碼。 Javascript/TypeScript爲該特定目的提供了一個encodeURI()函數。

URL編碼將字符轉換爲可通過Internet傳輸的格式,可以傳輸 。 [w3Schools Reference]

這裏是你如何解決這個問題:

let encodedName = encodeURI('xyz+manwal'); 
let encodedURI = 'http://localhost:3000/page?name='+encodedName; 

//.. OR using string interpolation 
let encodedURI = `http://localhost:3000/page?name=${ encodedName }`; 

以同樣的方式,可以解碼使用decodeURI()方法的參數。

let decodedValue = decodeURI(encodedValue); 
+0

這個解決方案比較好,在使用URL之前編碼效果不錯,但是。有第三方生成鏈接,其中包含「+」號。這些URL在'c#'的應用程序的舊版本中運行良好。但對於我們來說(新版本的應用程序),它甚至不接受'+'號立即將'+'轉換爲'%20'。 – Manwal

+0

當我使用webpack將其改變的URL'+'變成'%20'時使用angular。我想在網址上看到「+」號。在Apache的其他服務器中,不會將'+'轉換爲任何與URL相同的東西。 – Manwal