Как применить <p></p> теги к текстовому полю - PullRequest
0 голосов
/ 05 апреля 2009

У меня есть поле varchar () в SQL Server, в котором есть некоторые символы возврата каретки / перевода строки между знаками абзаца.

Я бы хотел превратить его в правильно отформатированный HTML.

Например:

---------- до ----------

Быстрая коричневая лиса перепрыгнула через ленивую собаку. Потом ему стало скучно и он лег спать. После этого он играл со своими друзьями.

На следующий день он и его друзья устроили большую вечеринку.


---------- после -----------

Быстрая коричневая лиса перепрыгнула через ленивую собаку. Потом ему стало скучно и он лег спать. После этого он играл со своими друзьями.

На следующий день он и его друзья устроили большую вечеринку.


Какой правильный способ сделать это? Очевидно, что регулярные выражения были бы хорошим способом, но я не могу понять, как перехватить начало поля вместе с комбо crlf (возврат каретки / перевод строки) в здравом смысле.

Есть какие-нибудь гении-регулярники? Хотелось бы помочь. Спасибо, если так!

Ответы [ 4 ]

6 голосов
/ 05 апреля 2009

Регулярное выражение не требуется для чего-то подобного. Операции с простыми строками могут это сделать. (Пример в C #):

text = "<p>" + text.Replace("\r\n", "</p><p>") + "</p>";

(В зависимости от того, являются ли разрывы строк системными или нет, следует использовать либо конкретную строку, например "\r\n", либо свойство Environment.NewLine.)

Если строка изначально поступает из пользовательского ввода, поэтому у вас нет полного контроля над ней, вы должны правильно закодировать ее в формате html, прежде чем добавлять теги абзаца, чтобы предотвратить атаки сценариев между сайтами.

4 голосов
/ 05 апреля 2009

И не забывайте, что добавления тегов

недостаточно, вы должны избегать символов, которые имеют особое значение в HTML (<становится & lt; и т. Д.), В противном случае вы можете получить неработающую страницу или даже скрипт инъекции. </p>

0 голосов
/ 13 ноября 2017

Если строка изначально поступает из пользовательского ввода, поэтому у вас нет полного контроля над ней, вы должны правильно html кодировать ее, прежде чем вставлять теги абзаца в

yourString="p" + text.Replace("\r\n","<p></p>") + "</p>";
0 голосов
/ 05 апреля 2009

Если текст уже разбит на абзацы с символами новой строки, это может быть просто:

text = Regex.Replace(text, ".+", "<p>$0</p>");

Предполагается, что между абзацами нет специальных символов HTML (как упоминал Тило) или лишних пробельных символов, например: "text\n \nmore text". Вы хотели бы разобраться с чем-то подобным, прежде чем добавлять теги.

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