添加缺失的 html 标签

Adding missing html tags

是否可以在 ASP MVC 中添加缺失的 html 标签。这就是我的意思:

String x = "<p><b>Hello world how are you</b></p>";

在前几个字符处替换该字符串将导致:

String x = "<p>Hello world ";

在缺少 </p> 标签的地方,在循环中使用 @MvcHtmlString.Create(x) 会导致标签混淆,从而导致标签丢失。

ASP MVC 中是否有自动执行此操作的方法或 C# 函数来纠正它们?

1可能最简单的做法是创建一个辅助函数,该函数接收 MvcHtmlString.Create(x) 的输出并在缺少时添加结束标记。

看起来像这样(未测试)

    private string CloseTag(string snippet)
    {
        if (string.IsNullOrEmpty(snippet) || (snippet.TrimStart().StartsWith("<") && snippet.TrimEnd().EndsWith(">")) || !snippet.TrimStart().StartsWith("<"))
        {
            return snippet;
        }

        var index = snippet.IndexOf('>');
        var tag = snippet.Substring(1, index - 1);
        return snippet.TrimEnd() + "</" + tag + ">";
    }

稍微清理一下,您可以创建一个扩展方法并直接在您的字符串上调用它

检查这个要点:https://gist.github.com/mouhong/c09487502e261f7ce53d

它将关闭丢失的结束标签(支持嵌套标签)和损坏的结束标签,并忽略损坏的开始标签。

它还没有完全测试,如果你发现任何错误请告诉我:P

用法:

"<p>Hello".CloseTags();

示例:

+-------------------------+--------------------------------+
|            Input        |          Output                |
+-------------------------+--------------------------------+
| <div>Hello World        | <div>Hello World</div>         |
| <div>Hello, <b>World    | <div>Hello, <b>World</b></div> |
| <div>Hello World</di    | <div>Hello World</div>         |
| <div>Hello, <b>World</  | <div>Hello, <b>World</b></div> |
| <div>Hello World. <span | <div>Hello World. </div>       |
+-------------------------+--------------------------------+