Заменить символы новой строки абзацем <p>и тегами <br /> - PullRequest
10 голосов
/ 06 января 2010

Итак, я знаю , как заменить символы новой строки в моем коде C #. Но замена новой строки для тега <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>

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

Заранее спасибо.

Ответы [ 2 ]

20 голосов
/ 06 января 2010

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

    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> по-прежнему сопряжено с риском межсайтового скриптинга).

5 голосов
/ 06 января 2010

Вы можете просто оставить его в покое и использовать CSS для правильной визуализации разрывов. Вот сложный пример, который является своего рода «симпатичной» заменой для

, но вместо этого вы используете : 

  

 Текст идет сюда. 

...