我有一个非常简单的asp:textbox
,启用了multiline
属性。然后我接受文本框中没有标记的文本。是否有一种常用方法可以将换行符和返回值转换为<p>
和<br/>
标记?
我不是在寻找任何惊天动地的东西,但与此同时我不只想做类似的事情:
html.Insert(0, "<p>");
html.Replace(Enviroment.NewLine + Enviroment.NewLine, "</p><p>");
html.Replace(Enviroment.NewLine, "<br/>");
html.Append("</p>");
上面的代码无法正常工作,如生成正确的html,如果一行中有两个以上的换行符。像<br/></p><p>
这样的html并不好; <br/>
可以删除。
答案 0 :(得分:22)
我知道这是旧的,但经过一番搜索我找不到更好的东西,所以这就是我正在使用的东西:
public static string TextToHtml(string text)
{
text = HttpUtility.HtmlEncode(text);
text = text.Replace("\r\n", "\r");
text = text.Replace("\n", "\r");
text = text.Replace("\r", "<br>\r\n");
text = text.Replace(" ", " ");
return text;
}
如果由于某种原因无法使用HttpUtility,那么你将不得不以其他方式进行HTML编码,并且需要担心许多小细节(不只是<>&
)。
HtmlEncode只为你处理特殊字符,所以在此之后我将回车和/或换行的任意组合转换为BR标签,并将任何双空格转换为单空格加上NBSP。
您可以选择在最后一部分使用PRE标签,如下所示:
public static string TextToHtml(string text)
{
text = "<pre>" + HttpUtility.HtmlEncode(text) + "</pre>";
return text;
}
答案 1 :(得分:10)
您的另一个选择是获取文本框内容,而不是尝试换行,段落中断只是将文本放在PRE标记之间。像这样:
<PRE>
Your text from the text box...
and a line after a break...
</PRE>
答案 2 :(得分:4)
如何将其投放到<pre>
标记中。那不就是那里的东西吗?
答案 3 :(得分:4)
根据您对内容的确切操作,我的典型建议是仅使用<br />
语法,而不是尝试处理段落。
答案 4 :(得分:3)
我知道这是一篇很老的帖子,但我最近遇到过使用C#和MVC4的类似问题,所以我想我会分享我的解决方案。
我们在数据库中保存了说明。该文本是来自网站的直接复制/粘贴,我们希望使用<p>
标记将其转换为语义HTML。以下是我们解决方案的简化版本:
string description = getSomeTextFromDatabase();
foreach(var line in description.Split('\n')
{
Console.Write("<p>" + line + "</p>");
}
在我们的例子中,为了写出一个变量,我们需要在任何变量或标识符前面加@
前缀,因为ASP.NET MVC框架中有Razor语法。但是,我已经用Console.Write
显示了这一点,但您应该能够根据以下内容弄清楚如何在特定项目中实现这一点:)
答案 5 :(得分:0)
将文本中所有先前加上标题和副标题的内容结合在一起,便得出:
public static string ToHtml(this string text)
{
var sb = new StringBuilder();
var sr = new StringReader(text);
var str = sr.ReadLine();
while (str != null)
{
str = str.TrimEnd();
str.Replace(" ", " ");
if (str.Length > 80)
{
sb.AppendLine($"<p>{str}</p>");
}
else if (str.Length > 0)
{
sb.AppendLine($"{str}</br>");
}
str = sr.ReadLine();
}
return sb.ToString();
}
可以通过为短字符串定义规则来增强代码段