2012-04-10 2 views
17

Я генерирую простой HTML-код с помощью скрипта PowerShell, и мне бы хотелось избежать строк, используемых в результате HTML (поскольку они могут содержать некоторые символы, специфичные для HTML).Каков наилучший способ избежать символов HTML в строке (PowerShell)?

Например:

$a = "something <somthing else>"; 

должны быть преобразованы в следующие:

"something &lt;something else&gt;" 

Есть ли встроенная функция для этого?

ответ

32

Существует класс, который будет делать это в System.Web.

Add-Type -AssemblyName System.Web 
[System.Web.HttpUtility]::HtmlEncode('something <somthing else>') 

Вы можете даже пойти другой путь:

[System.Web.HttpUtility]::HtmlDecode('something &lt;something else&gt;') 
+0

Вот что я искал, спасибо! – Kel

+0

Альтернативой является использование '[System.Security.SecurityElement] :: Escape ($ textToEscape)'. Существуют некоторые различия; см .: https://www.roelvanlisdonk.nl/2009/09/23/you-should-use-system-security-securityelement-escape-in-c-to-escape-special-characters-in-xml-and- не-системы веб-httputility-HtmlEncode /. – JohnLBevan

1

Начиная с PowerShell 3.0, используйте [System.Net.WebUtility] для любого из четырех общих операций:

[System.Net.WebUtility]::HtmlEncode('something <somthing else>') 
[System.Net.WebUtility]::HtmlDecode('something &lt;somthing else&gt;') 
[System.Net.WebUtility]::UrlEncode('something <somthing else>') 
[System.Net.WebUtility]::UrlDecode('something+%3Csomthing+else%3E') 

[System.Web.HttpUtility]::HtmlEncode является общим подходом предыдущего к .NET 4.0 (PowerShell 2.0 или ранее), но потребуется загрузка System.Web.dll:

Add-Type -AssemblyName System.Web 

Начиная с .NET 4.0 (PowerShell 3.0) [System.Web.HttpUtility]::HtmlEnocde внутренне вызывает [System.Net.WebUtility]::HtmlEncode, поэтому имеет смысл выйти из среднего человека (System.Web.dll).

Смежные вопросы