2014-05-08 64 views
19

我正在創建一個PowerShell腳本,它將組裝來自用戶輸入的HTTP路徑。輸出必須將用戶輸入中的任何空格轉換爲產品特定代碼「%2F」。如何在PowerShell中用%20替換空格?

這裏的源極和輸出的一個示例:

該網站的URL可以是恆定的,雖然一個變量將是重用一個較好的方法,因爲在程序中使用的是:/ HTTP:%2F% 2SPServer /項目/」

$Company="Company" 
$Product="Product" 
$Project="The new project" 
$SitePath="$SiteUrl/$Company/$Product/$Project" 

作爲輸出我需要:

'/http:%2F%2FSPServer%2FProjects%2FCompany%2FProductF2FThe%2Fnew%2Fproject' 

回答

9

您所需要的輸出轉換(空格%20,正斜槓到%2F)被稱爲URL編碼它取代(越獄)ch當一個URL的一部分與它們的十六進制等效符號前加一個%符號時,它們具有特殊含義。

您可以在Powershell中使用.NET框架類。

[System.Web.HttpUtility]::UrlEncode($SitePath) 

一個進行編碼URL字符串。這些方法重載可用於編碼整個URL,包括查詢字符串值。

http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx

+1

這給+而不是%20,所以使用下面的一個 – edelwater

+0

@edelwater; +是URL中空格字符的有效編碼。我很確定OP只需要一個有效編碼的URL,而不是專門針對空間的%20。 –

+1

永遠不會運行urlencode,總是運行uri:escapedatastring(並始終運行urldecode); google/stackoverflow它例如http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx – edelwater

35

要更換" "%20/%2F等,執行以下操作:

[uri]::EscapeDataString($SitePath) 
+0

謝謝,這個工作。 @Eric J的建議可行,但我會先找到System.Web。你的解決方案更簡單,而且工作。謝謝 –

+0

它工作!!!!!! –

+0

如果您正在尋找編碼查詢字符串的完整示例:https://stackoverflow.com/documentation/powershell/7352/url-encode-decode/24404/encode-query-string-with-uriescapedatastring#t= 201610100318438161132 – VertigoRay

14

@manojlds的溶液所提供的字符串在轉換所有奇數字符。 如果你想要做的只是轉義網址,使用

[uri]::EscapeUriString($SitePath) 

這會留下,例如,斜線(/)或等號(=),因爲它們。

實施例:

# Returns http%3A%2F%2Ftest.com%3Ftest%3Dmy%20value 
[uri]::EscapeDataString("http://test.com?test=my value") 

# Returns http://test.com?test=my%20value 
[uri]::EscapeUriString("http://test.com?test=my value") 
4

對於較新的操作系統,命令被改變。我在Server 2012 R2和Windows 10中遇到了這個問題。

[System.Net.WebUtility]是你應該使用的,如果你得到[System.Web.HttpUtility]不存在的錯誤。