我从数据库中获取以下文本:(由客户提供,因此我无法使用它)
investment professionals.<BR /><BR /> blah blah blah
将呈现为:
investment professionals.<BR /><BR /> blah blah blah
我不想在屏幕上打印<BR />
标签。我希望他们表现得像实际的休息一样。
以下Html Helper代码构建它所存在的范围,将其添加到div并返回HTML字符串:
StringBuilder sbElements = new StringBuilder();
TagBuilder span = new TagBuilder("span") {InnerHtml = subject.AboutText};
sbElements.Append(span.ToString());
TagBuilder div = new TagBuilder("div");
div.MergeAttribute("class", "about-text");
div.InnerHtml = sbElements.ToString();
return div.ToString();
如果我Html.Encode()
帮助方法的输出,编码标签 - /><
- 将被写入屏幕。如何获取我拥有的源文本并确保标记呈现为HTML而不是文本?
答案 0 :(得分:32)
如果您正在使用Razor,它会对您的字符串进行双重编码,如@Chevex所述。如果您使用新的MVC3 <%: %>
语法,它也会对其进行双重编码。无论您的视图引擎如何,您都可以使用@Chevex描述的IHtmlString路由(例如,MvcHtmlString)或使用不同的模板语法绕过默认编码来解决编码问题。
后者不涉及更改任何代码,只需要调整用于渲染视图的语法。
Razor:
@Html.Raw(yourvariable)
对于MVC的默认视图模板系统:
<%=yourvariable%>
答案 1 :(得分:19)
试试这个:
String Input = "investment professionals.<BR /><BR /> blah blah blah";
String Output = Server.HtmlDecode(Input);
答案 2 :(得分:10)
将返回div.ToString()
更改为MvcHtmlString.Create(div.ToString())
,方法返回类型为MvcHtmlString
,而不是string
。这将阻止视图引擎自动编码输出。
返回MvcHtmlString
是通过帮助方法呈现HTML输出的标准做法。
发生的事情是您正在解码数据库中的值,并且视图引擎在呈现时会对其进行重新编码。 Razor视图引擎会自动对视图中的输出进行HTML编码,除非它是MvcHtmlString
。返回MvcHtmlString
将阻止这种情况发生。
public static MvcHtmlString MyNonHtmlEncodedOutput(this HtmlHelper html)
{
StringBuilder sbElements = new StringBuilder();
TagBuilder span = new TagBuilder("span") {InnerHtml = Server.HtmlDecode(subject.AboutText)};
sbElements.Append(span.ToString());
TagBuilder div = new TagBuilder("div");
div.MergeAttribute("class", "about-text");
div.InnerHtml = sbElements.ToString();
return MvcHtmlString.Create(div.ToString());
}
答案 3 :(得分:6)
你可以试试这个:
String Input = "<p>New Appartments is Avaliable at very Reasonable Price</p>";
String Output = Server.HtmlDecode(Input);
string _output = System.Text.RegularExpressions.Regex.Replace(Output, "<.*?>", string.Empty);
答案 4 :(得分:2)
您实际上想要使用Html.Decode(string)
。这会将<
等编码字符转换为<
。
答案 5 :(得分:1)
只是将我的发现添加到这个问题中,因为我正在努力以这种方式使用×。
默认情况下,SetInnerText()将对所有文本进行html编码,而InnerHtml不会编码任何内容,因为它需要原始的html。
因此,如果我有正确的方法,你必须首先解码你的文本字符串以获取未编码的标签(即<br/>
),然后将其设置为InnerHtml属性,标签将是呈现为html。
所以你会有像
这样的东西element.InnerHtml = Server.HtmlDecode(yourText);