【问题标题】:Remove some HTML Tags using RegEx MVC使用 RegEx MVC 删除一些 HTML 标签
【发布时间】:2020-07-05 04:53:51
【问题描述】:

我通过按下一个按钮来发送一封电子邮件,该按钮将整个视图转换为一个字符串,这个字符串用作电子邮件的正文。

但是当邮件到达时,会出现“查看”按钮,我尝试使用 RegEx 将其消除,但它不起作用

如何从字符串中删除这些标签?

这是我的看法

@model IEnumerable<MvcInventory.TB_RS_PROD>
@{

}
<html>
<table class="table table-striped">
    <tr>
        <td>ID PRODUCT</td>
        <td>PRODUCT NAME</td>
        <td>QUIANTITY</td>
        <td>DATE</td>
        <td>STATUS</td>
        <td>EMAIL</td>
        <td>EMAIL 2</td>
    </tr>
    @foreach (var item in Model)
    {
        <tr>
           <td>@item.IDPROD</td>
           <td>@item.PROD_NAME</td>
           <td>@item.QUANTITY</td>
           <td>@item.UPDATE_DATE</td>
           <td>@item.STATUS</td>
           <td>@item.EMAIL</td>
           <td>@item.EMAIL2</td>
        </tr>
    }
</table>
<button onclick="location.href='@Url.Action("SendEmail","Home")'">Send Email</button>
</html>

字符串编写器代码:

protected string RenderPartialViewToString(string viewName, object model)
{
        if (string.IsNullOrEmpty(viewName))
            viewName = ControllerContext.RouteData.GetRequiredString("action");

        ViewData.Model = model;

        using (StringWriter sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
            ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
            viewResult.View.Render(viewContext, sw);

            return sw.GetStringBuilder().ToString();
        }
}

最后是 RenderPartialViewToString 的调用

var htmlp = RenderPartialViewToString("~/Views/ActionApprovers/Action.cshtml", TempData["email-act"]);
var allowtag = new Regex(@"(</?[^(p|ol|ul|li|span|i|b|br|table|tr|td)]/?>)");
htmlp = allowtag.Replace(htmlp, "");

【问题讨论】:

  • [^(p|ol|ul|li|span|i|b|br|table|tr|td)] 是一个错误的模式,一个否定的字符类只匹配一个字符,你不能用它来匹配任何文本,除了一些字符序列。
  • 在这种情况下,您建议我怎么做才能删除

标签: c# regex asp.net-mvc-4 visual-studio-2012


【解决方案1】:

经过多次发帖,我建议您对要保留和删除的标签执行以下方法

    string acceptable = "p|a|tr|td|table|html"; //Tags that are a-okay to display
    string stringPattern = @"</?(?(?=" + acceptable + @")notag|[a-zA-Z0-9]+)(?:\s[a-zA-Z0-9\-]+=?(?:(["",']?).*?\1?)?)*\s*/?>";
    htmlp = Regex.Replace(htmlp, stringPattern, "");

【讨论】:

    猜你喜欢
    • 2011-11-12
    • 1970-01-01
    • 2014-10-08
    • 2013-08-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    相关资源
    最近更新 更多