在html中导出特定的字符

问题描述 投票:0回答:2

我想通过powershell将数据的哈希表导出到html,但ConvertTo-HTML命令似乎不会导出某些字符。

例如:

如果我有一个包含字符“<”的字符串的表,那么该表将导出如下所示的行:

<tr><td>&lt;</td></tr>

有没有办法,使用我当前的方法,我可以导出这些字符,而不必编辑我的HTML文档?

编辑:

我正在尝试使用ConvertTo-HTML创建一个HTML页面,其中包含从SQL服务器中提取的信息。我能够做到这一点,但路障试图用与当前列中的图像路径对应的图像替换其中一个表格列。我需要编辑这些图像,以便它们实际显示在网站上,并插入实际的html代码,这是我考虑的方式。

我查看了导出后编辑HTML文档的另一种方法,这种方法大部分都有效,但我最终得到的是没有<html><body>甚至<table>的HTML文档。

导出代码的第一行:

<tr><td>Name</td><td>Redacted</td><td>AR</td><td>email</td><td>+41 61 681 85 25</td><td><img src= "filepath to image folder" alt = "Cannot Find Image" height="100"></td></tr>

我尝试使用的方法可以在这里找到:

https://social.technet.microsoft.com/Forums/windowsserver/en-US/8a3c8dc5-169c-4b61-9bc3-672a7d1e31b3/powershell-to-open-and-edit-html-file?forum=winserverpowershell

html powershell
2个回答
0
投票

Convert-ToHTML返回一个字符串,然后可以在将其写入文件之前进一步处理。如果您的表格包含该行

<tr><td><IMG SRC="foo.png"></td></tr>

它将被转换为HTML

<tr><td>&lt;IMG SRC=&quot;foo.png&quot;&gt;</td></tr>

你发现了

但是,由于它是一个字符串,因此可以在将其写入文件之前进一步处理。如果后者(已转换)字符串存储在变量$imagelink中,则可以使用PowerShell -replace运算符:

$imagelink = $imagelink -replace "&lt;","<"

依此类推,用其对应的实际字符替换每个HTML字符实体。完成所有替换后,只需将其写入带有Set-Content的文件即可。


0
投票

ConvertTo-Html cmdlet输出文本,因此如果您知道要保留的图像路径,则可以在文本中搜索这些路径并在ConvertTo-Html将其编码为HTML后将其转换回来。考虑这个伪代码:

$HTML = $SQLdata | ConvertTo-Html -As Table
ForEach($ImageLink in $SQLdata.imagelinks){
    $EncodedLink = [System.Web.HttpUtility]::HtmlEncode($ImageLink)
    $HTML = $HTML -replace $EncodedLink, $ImageLink
}

所以首先我从SQL数据生成HTML。然后我用图像(我称之为$SQLdata.imagelinks)遍历列,并且对于每个字符串,我将其编码为HTML(就像ConvertTo-Html cmdlet一样),这样我就知道我在寻找什么。然后,我只需将编码字符串的任何实例替换为SQL数据中的原始实例。冲洗并重复,直到所有图像链接都替换回原始文本。

有一个例子,你可以使用你的<img src= "filepath to image folder" alt = "Cannot Find Image" height="100">字符串,在HTML编码之后,你会变成:

&lt;img src= &quot;filepath to image folder&quot; alt = &quot;Cannot Find Image&quot; height=&quot;100&quot;&gt;

所以在你的桌子的第一行你会看到:

<tr><td>Name</td><td>Redacted</td><td>AR</td><td>email</td><td>+41 61 681 85 25</td><td>&lt;img src= &quot;filepath to image folder&quot; alt = &quot;Cannot Find Image&quot; height=&quot;100&quot;&gt;</td></tr>

所以我们可以运行一些简单的行来证明这是有效的:

$OriginalLink = '<img src= "filepath to image folder" alt = "Cannot Find Image" height="100">'
$EncodedLink = [System.Web.HttpUtility]::HtmlEncode($OriginalLink)
$BrokenHtml = '<tr><td>Name</td><td>Redacted</td><td>AR</td><td>email</td><td>+41 61 681 85 25</td><td>&lt;img src= &quot;filepath to image folder&quot; alt = &quot;Cannot Find Image&quot; height=&quot;100&quot;&gt;</td></tr>'
$BrokenHtml -replace $EncodedLink, $OriginalLink

现在技术上-replace使用RegEx(正则表达式)匹配,所以如果你遇到麻烦试图匹配的东西,或获得无效的模式错误你可以逃脱编码链接是正则表达式友好,但我很确定HTML编码的过程它应该使它相对正则表达式安全。如果您使用有困难:

$HTML = $SQLdata | ConvertTo-Html -As Table
ForEach($ImageLink in $SQLdata.imagelinks){
    $EncodedLink = [System.Web.HttpUtility]::HtmlEncode($ImageLink)
    $RegexLink = [regex]::Escape($EncodedLink)
    $HTML = $HTML -replace $RegexLink, $ImageLink
}

编辑:我还将解释HTML,以及HTML特殊字符的使用。因此,你将<传输到ConvertTo-Html并接收&lt;的原因是小于符号是一个特殊字符。它保留用于定义HTML标记等内容。有许多字符具有这样的代码,大多数现代浏览器在将内容呈现给用户之前将转换为关联字符。你可以在这里查看一个列表:http://www.html.am/reference/html-special-characters.cfm

原因是ConvertTo-Html试图阻止你破坏它输出的HTML。当然,你的<img src...>行是有效的HTML,你知道,但cmdlet没有。假设您有一个字符串,表示Java < PowerShell,这不是有效的HTML,所以为了安全起见,cmdlet只是查找任何保留字符并将它们转换为它们的实体名称,这样您最终会得到可以安全呈现且不会损坏的文本文档的HTML结构。

© www.soinside.com 2019 - 2024. All rights reserved.