Dav*_*Dev 22 html c# asp.net-mvc encoding
我从数据库中获取以下文本:(由客户提供,所以我不能用它做多少)
investment professionals.<BR /><BR /> blah blah blah
Run Code Online (Sandbox Code Playgroud)
它被渲染为:
investment professionals.<BR /><BR /> blah blah blah
Run Code Online (Sandbox Code Playgroud)
我不想<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();
Run Code Online (Sandbox Code Playgroud)
如果我Html.Encode()是辅助方法的输出,则编码的标签/><- 被写入屏幕.如何获取我的源文本并确保标记呈现为HTML而不是文本?
pat*_*dge 32
如果您使用Razor,它将对您的字符串进行双重编码,如@Chevex所述.如果您使用新的MVC3 <%: %>语法,它也会对它进行双重编码.无论您的视图引擎如何,您都可以使用@Chevex描述的IHtmlString路由(例如,MvcHtmlString)或使用不同的模板语法绕过默认编码来解决编码问题.
后者不需要更改任何代码,只需要调整用于渲染视图的语法.
对于剃刀:
@Html.Raw(yourvariable)
Run Code Online (Sandbox Code Playgroud)
对于MVC的默认视图模板系统:
<%=yourvariable%>
Run Code Online (Sandbox Code Playgroud)
Ste*_*ens 19
试试这个:
String Input = "investment professionals.<BR /><BR /> blah blah blah";
String Output = Server.HtmlDecode(Input);
Run Code Online (Sandbox Code Playgroud)
Che*_*hev 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());
}
Run Code Online (Sandbox Code Playgroud)
小智 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);
Run Code Online (Sandbox Code Playgroud)