Ответ 1
Чтобы заменить " "
на %20
и /
на %2F
и т.д., выполните следующие действия:
[uri]::EscapeDataString($SitePath)
Я создаю 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'
Чтобы заменить " "
на %20
и /
на %2F
и т.д., выполните следующие действия:
[uri]::EscapeDataString($SitePath)
Решение @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")
Необходимое преобразование вывода (пробелы до %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
Для новых операционных систем команда изменена. У меня были проблемы с этим в Server 2012 R2 и Windows 10.
[System.Net.WebUtility] - это то, что вы должны использовать, если вы получаете ошибки, которых нет [System.Web.HttpUtility].