Barry Cohen
Barry Cohen

Reputation: 691

How do I replace spaces with %20 in PowerShell?

I'm creating a PowerShell script that will assemble an HTTP path from user input. The output has to convert any spaces in the user input to the product specific codes, "%2F".

Here's a sample of the source and the output:

The site URL can be a constant, though a variable would be a better approach for reuse, as used in the program is: /http:%2F%2SPServer/Projects/"

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

As output I need:

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

Upvotes: 69

Views: 66417

Answers (4)

Matt Wall
Matt Wall

Reputation: 505

For newer operating systems, the command is changed. I had problems with this in Server 2012 R2 and Windows 10.

[System.Net.WebUtility] is what you should use if you get errors that [System.Web.HttpUtility] is not there.

$Escaped = [System.Net.WebUtility]::UrlEncode($SitePath)

Upvotes: 21

Dennis
Dennis

Reputation: 2165

The solution of @manojlds converts all odd characters in the supplied string. If you want to do escaping for URLs only, use

[uri]::EscapeUriString($SitePath)

This will leave, e.g., slashes (/) or equal signs (=) as they are.

Example:

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

Upvotes: 69

manojlds
manojlds

Reputation: 301147

To replace " " with %20 and / with %2F and so on, do the following:

[uri]::EscapeDataString($SitePath)

Upvotes: 108

Eric J.
Eric J.

Reputation: 150108

The output transformation you need (spaces to %20, forward slashes to %2F) is called URL encoding. It replaces (escapes) characters that have a special meaning when part of a URL with their hex equivalent preceded by a % sign.

You can use .NET framework classes from within Powershell.

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

Encodes a URL string. These method overloads can be used to encode the entire URL, including query-string values.

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

Upvotes: 15

Related Questions