在字符串(PowerShell)中转义HTML特定字符的最佳方法是什么?

Kel*_*Kel 25 html powershell

我正在使用PowerShell脚本生成一些简单的HTML,我想要转义结果HTML中使用的字符串(因为它们可以包含一些特定于HTML的符号).

例如:

$a = "something <somthing else>";
Run Code Online (Sandbox Code Playgroud)

应转换为以下内容:

"something &lt;something else&gt;"
Run Code Online (Sandbox Code Playgroud)

那有内置功能吗?

And*_*ndi 48

有一个类将在System.Web中执行此操作.

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

你甚至可以走另一条路:

[System.Web.HttpUtility]::HtmlDecode('something &lt;something else&gt;')
Run Code Online (Sandbox Code Playgroud)

  • 一种替代方法是使用[[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- not-system-web-httputility-htmlencode /。 (2认同)

Cur*_*s R 7

从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')
Run Code Online (Sandbox Code Playgroud)

[System.Web.HttpUtility]::HtmlEncode是.NET 4.0(PowerShell 2.0或更早版本)之前的常用方法,但需要加载System.Web.dll:

Add-Type -AssemblyName System.Web
Run Code Online (Sandbox Code Playgroud)

从.NET 4.0(PowerShell 3.0)[System.Web.HttpUtility]::HtmlEnocde内部调用开始[System.Net.WebUtility]::HtmlEncode,因此省略中间man(System.Web.dll)是有意义的.