Подтвердить что ты не робот

Как заменить пробелы на %20 в PowerShell?

Я создаю PowerShell script, который будет собирать 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'
4b9b3361

Ответ 1

Чтобы заменить " " на %20 и / на %2F и т.д., выполните следующие действия:

[uri]::EscapeDataString($SitePath)

Ответ 2

Решение @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") 

Ответ 3

Необходимое преобразование вывода (пробелы до %20, косые черты до% 2F) называется кодировкой URL. Он заменяет (экранирует) символы, которые имеют особый смысл, когда часть URL с шестнадцатеричным эквивалентом предшествует знаку%.

Вы можете использовать .NET framework классы из Powershell.

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

Кодирует строку URL. Эти перегрузки методов могут использоваться для кодирования всего URL-адреса, включая значения строки запроса.

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

Ответ 4

Для новых операционных систем команда изменена. У меня были проблемы с этим в Server 2012 R2 и Windows 10.

[System.Net.WebUtility] - это то, что вы должны использовать, если вы получаете ошибки, которых нет [System.Web.HttpUtility].