简单的文本到HTML转换

时间:2010-10-21 20:54:54

标签: c# html parsing

我有一个非常简单的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/>可以删除。

6 个答案:

答案 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("  ", " &nbsp;");
    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("  ", " &nbsp;");
        if (str.Length > 80)
        {
            sb.AppendLine($"<p>{str}</p>");
        }
        else if (str.Length > 0)
        {
            sb.AppendLine($"{str}</br>");
        }
        str = sr.ReadLine();
    }

    return sb.ToString();
}

可以通过为短字符串定义规则来增强代码段