我如何允许客户端在MVC 4中使用html标签? 我想将记录保存到数据库中,当它在视图中提取时只允许一些HTML标记(< b>< i>< img>),其他标记必须表示为文本。
我的控制器:
[ValidateInput(false)]
[HttpPost]
public ActionResult Rep(String a)
{
var dbreader = new DataBaseReader();
var text = Request["report_text"];
dbreader.SendReport(text, uid, secret).ToString();
...
}
我的观点:
@{
var dbreader = new DataBaseReader();
var reports = dbreader.GetReports();
foreach (var report in reports)
{
<div class="report_content">@Html.Raw(report.content)</div>
...
}
}
答案 0 :(得分:1)
如果您正在尝试视图模型对象的某些属性来接受Html文本,请使用AllowHtmlAttribute
[AllowHtml]
public string UserComment{ get; set; }
并在绑定到视图之前
model.UserComment=model.UserComment.Replace("<othertagstart/end>",""); //hard
答案 1 :(得分:1)
您可以替换所有&lt; chars to HTML entity:
tags = tags.Replace("<", "<");
现在,只替换回允许的标签:
tags = tags
.Replace("<b>", "<b>")
.Replace("</b>", "</b>")
.Replace("<i>", "</i>")
.Replace("</i>", "</i>")
.Replace("<img ", "<img ");
使用 @ Html.Raw(tags)
渲染到页面答案 2 :(得分:0)
关闭report_text
(1)的验证并编写自定义HTML编码器(2):
第1步:
Request.Unvalidated().Form["report_text"]
更多信息here。您无需关闭整个控制器操作的验证。
第2步:
编写自定义html编码器(将除b,i,img之外的所有标签转换为例如:script - &gt ;; ltscript; gt),因为您要自定义请求验证和html标记过滤的默认行为。考虑通过检查传递给存储过程/函数等的SQL参数来保护自己免受SQL注入攻击。
答案 3 :(得分:0)
您可能需要查看BBCode BBCode on Wikipedia。通过这种方式,您可以控制允许的内容和不允许的内容,并防止非法使用。
这可以这样工作:
答案 4 :(得分:0)
我找到了问题的解决方案:
html = Regex.Replace(html, "<b>(.*?)</>", "<b>$1</b>");
html = Regex.Replace(html, "<i>(.*?)</i>", "<i>$1</i>");
html = Regex.Replace(html, "<img(?:.*?)src="(.*?)"(?:.*?)/>", "<img src=\"$1\"/>");