如何在网站(Asp.net C#)中显示HTML格式的文本

6
我有一个文本编辑器,在对文本应用格式之后,当单击按钮时显示文本。我希望文本以文本编辑器中应用的所有格式显示。
 lbl_Subject.Text = Server.HtmlEncode(formattedtext);

但它并没有按照应用的格式显示,而是以如下形式显示:
<p> This is Para 1</p> <p> this is Para 2</p> <p> <strong>this is bold</strong></p>

如何在文本编辑器中显示应用了所有格式的文本?

更新 我尝试使用literal标签

结果是:

&lt;p&gt; This is Para 1&lt;/p&gt; &lt;p&gt; this is Para 2&lt;/p&gt; &lt;p&gt; &lt;strong&gt;this is bold&lt;/strong&gt;&lt;/p&gt;
7个回答

8
请使用div代替label。
div1.InnerHtml=formattedtext;

6

HtmlEncode 可以确保文本在浏览器中能够正确地显示,而不会被浏览器解释为 HTML 代码。

尝试删除 HtmlEncode 或使用 HtmlDecode


1
Server.HtmlDecode(Server.HtmlEncode(formattedtext)) 看起来有点傻,但也许只是我这么认为。 - Joel Etherton

2

如果您想在浏览器中呈现文本作为html,则为什么要进行Html编码?HtmlEncode旨在将可能具有html符号的代码进行编码,以便这些符号打印为原始文本。我会说,您提供的代码的行为恰好符合预期的行为。如果您希望您的代码输出要呈现的html,则应使用文字,它应该只是文本。

lit_Subject.Text = formattedtext;

1
您可能想使用文字控件(Literal Control)而不是标签(Label)。这将以所需的方式输出原始HTML字符串到页面上。
另外,当像这样显示HTML时,请非常小心。例如,添加恶意脚本并从查看的页面运行它们并不困难。

0

看一下 AntiXssLibrary(可以通过 nuget 找到)。

特别是 Sanitizer 类。它接受一个字符串并从中删除所有与安全相关的内容。

它还会更改 CSS 类的名称,因此您可能需要调整结果以恢复类名。但它绝对可以让您在页面上安全地获取原始 HTML,而不会冒 XSS 攻击的风险。


0
你可以使用这段代码:Html.Raw(formattedtext)

0
另一种方法是添加pre标签。这将看起来像:
 lbl_Subject.Text = $"<pre>{formattedtext}</pre>"

如果标签不起作用,请将其更改为 div
div_Subject.InnerHtml =  $"<pre>{formattedtext}</pre>"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接