Замените символы новой строки на <p>и с тегами <br/">

Итак, я знаю, как заменить строки в моем С# -коде. Но замена новой строки для тега <br /> не всегда очень правильная.

Итак, мне было интересно, какую стратегию используют другие? Правильный способ, я думаю, будет использовать теги <p> и теги <br />.

Вот несколько примеров результатов, которые я хотел бы получить.

Если нет новой строки, я хочу, чтобы текст был обернут тегами <p>.

Этот текст не содержит символов новой строки

<p>This text contains no newlines</p>   

Если текст содержит новую строку, я хочу, чтобы он был заменен тегом <br /> и был заключен в теги <p>.

Этот текст содержит 1 новая строка

<p>This text contains<br /> 1 newline.</p>

Если есть "двойные строки", я хочу, чтобы этот блок был заключен в теги <p>.

Это текст с "двойными линиями" в конце.

Это текст без новой строки в конце.

<p>This a text with 'double newlines at the end.</p>
<p>This is a text with no newline at the end.</p>

Я мог бы написать больше примеров/комбинаций, но я предполагаю, что это несколько ясно, что я имею в виду.

Спасибо заранее.

Ответ 1

Здесь вы можете сделать это, используя только простые замены строк:

    string result = "<p>" + text
        .Replace(Environment.NewLine + Environment.NewLine, "</p><p>")
        .Replace(Environment.NewLine, "<br />")
        .Replace("</p><p>", "</p>" + Environment.NewLine + "<p>") + "</p>";

Обратите внимание, что сначала ваш текст должен быть экранирован с помощью HTML, иначе вы можете столкнуться с рисками межсайтовых скриптовых атак. (Примечание: даже при использовании тегов <pre> все еще существует риск межсайтового скриптинга).

Ответ 2

Вы можете просто оставить его в покое и использовать CSS для правильного отображения разрывов. Вот сложный пример, который является своего рода "симпатичным". замена для <pre> но вы используете <p> вместо:

< p style = "padding: 1em; line-height: 1.1em; font-family: monospace; white-space: pre; переполнение: авто; background-color: rgb (240 255 240); граница: тонкий твердый rgb (255, 220, 255); < gt; </p>

Текст идет здесь.

</р >