添加缺少的html标签

时间:2015-04-26 13:00:49

标签: c# html asp.net-mvc string 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#函数来纠正它们?

2 个答案:

答案 0 :(得分:5)

检查这个要点: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>       |
+-------------------------+--------------------------------+

答案 1 :(得分:0)

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 + ">";
    }

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