Простое преобразование текста в HTML - PullRequest
7 голосов
/ 22 октября 2010

У меня очень простой 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, если в строке более двух разрывов строки.Наличие html вроде <br/></p><p> не хорошо;<br/> можно удалить.

Ответы [ 5 ]

22 голосов
/ 23 мая 2013

Я знаю, что это старый, но я не смог найти ничего лучше после некоторого поиска, поэтому вот что я использую:

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 для последней части, вот так:

<code>public static string TextToHtml(string text)
{
    text = "<pre>" + HttpUtility.HtmlEncode(text) + "
"; вернуть текст;}
10 голосов
/ 22 октября 2010

Другой вариант - взять содержимое текстового поля и вместо попытки разбить абзац на строку просто поместить текст между тегами PRE. Как это:


Your text from the text box...

and a line after a break...
4 голосов
/ 22 октября 2010

В зависимости от того, что именно вы делаете с контентом, моя типичная рекомендация - использовать ТОЛЬКО синтаксис <br />, а не пытаться обрабатывать абзацы.

4 голосов
/ 22 октября 2010

Как насчет добавления его в тег <pre>.Разве это не то, что там есть?

3 голосов
/ 09 ноября 2012

Я знаю, что это старый пост, но недавно у меня была похожая проблема с использованием C # с MVC4, поэтому я решил поделиться своим решением.

У нас было описание, сохраненное в базе данных. Текст был прямой копией / вставкой с веб-сайта, и мы хотели преобразовать его в семантический HTML, используя теги <p>. Вот упрощенная версия нашего решения:

string description = getSomeTextFromDatabase();
foreach(var line in description.Split('\n')
{
    Console.Write("<p>" + line + "</p>");
}

В нашем случае, чтобы записать переменную, нам нужно было поставить префикс @ перед любой переменной или идентификаторами из-за синтаксиса Razor в ASP.NET MVC framework. Тем не менее, я показал это с Console.Write, но вы должны быть в состоянии выяснить, как реализовать это в вашем конкретном проекте на основе этого:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...