如何在PowerShell中用%20替换空格?

时间:2014-05-08 17:14:02

标签: powershell

我正在创建一个PowerShell脚本,该脚本将汇集来自用户输入的HTTP路径。输出必须将用户输入中的任何空格转换为产品特定代码,"%2F"。

这是源和输出的示例:

站点URL可以是常量,但变量是更好的重用方法,因为程序中使用的是:/ http:%2F%2SPServer / Projects /"

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

作为输出我需要:

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

4 个答案:

答案 0 :(得分:53)

要将" "替换为%20,将/替换为%2F,依此类推,请执行以下操作:

[uri]::EscapeDataString($SitePath)

答案 1 :(得分:32)

@manojlds的解决方案在提供的字符串中转换所有个奇数字符。 如果您只想转发URL,请使用

[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") 

答案 2 :(得分:13)

您需要的输出转换(空格到%20,正斜杠到%2F)称为URL编码。它替换(转义)具有特殊含义的字符,当URL的一部分的十六进制等效符号前面带有%符号时。

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

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

对URL字符串进行编码。这些方法重载可用于编码整个URL,包括查询字符串值。

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

答案 3 :(得分:8)

对于较新的操作系统,命令已更改。我在Server 2012 R2和Windows 10中遇到此问题。

[System.Net.WebUtility]是你应该使用[System.Web.HttpUtility]不存在的错误。