是否可以在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#函数来纠正它们?
答案 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 + ">";
}
稍微清理一下,你可以创建一个扩展方法并直接在你的字符串上调用它