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

Bar*_*hen 34 powershell

我正在创建一个PowerShell脚本,它将从用户输入组装HTTP路径.输出必须将用户输入中的任何空格转换为产品特定代码"%2F".

这是源和输出的示例:

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

$Company="Company"
$Product="Product"
$Project="The new project"
$SitePath="$SiteUrl/$Company/$Product/$Project"
Run Code Online (Sandbox Code Playgroud)

作为输出我需要:

'/http:%2F%2FSPServer%2FProjects%2FCompany%2FProductF2FThe%2Fnew%2Fproject'
Run Code Online (Sandbox Code Playgroud)

man*_*lds 56

要替换" "%20/使用%2F等,请执行以下操作:

[uri]::EscapeDataString($SitePath)
Run Code Online (Sandbox Code Playgroud)

  • 并且,相反的操作是`[uri]::UnescapeDataString`。 (6认同)
  • @MarkWorrall 当他说空格时,他显示了斜线。通过上下文和例子,我们可以看到他希望避开斜杠和空格。另外,通过他的问题的上下文,他似乎希望对其用例进行 urlencode 或转义字符串。 (2认同)

Den*_*nis 36

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

[uri]::EscapeUriString($SitePath)
Run Code Online (Sandbox Code Playgroud)

这将留下例如斜杠(/)或等号(=).

例:

# 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") 
Run Code Online (Sandbox Code Playgroud)


Eri*_* J. 14

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

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

[System.Web.HttpUtility]::UrlEncode($SitePath) 
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这给出了 + 而不是 %20,所以使用下面的那个 (2认同)
  • 当我尝试它时,我得到*无法找到类型[System.Web.HttpUtility]:确保加载包含此类型的程序集.在行:1 char:25 + [System.Web.HttpUtility] <<<< :: UrlEncode("Peter")+ CategoryInfo:InvalidOperation:(System.Web.HttpUtility:String)[],RuntimeException + FullyQualifiedErrorId:TypeNotFound*.这会与.NET版本有关吗? (2认同)
  • @PeterMortensen `添加类型 -AssemblyName System.Web` (2认同)

Mat*_*all 8

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

如果出现[System.Web.HttpUtility]不存在的错误,应该使用[System.Net.WebUtility].