HTMLencode HTMLdecode

У меня есть текстовая область, и я хочу сохранить текст, введенный пользователем, в базе данных с форматированием html, например разрыв абзаца, нумерованный список. Для этого я использую HTMLencode и HTMLdecode.

Пример моего кода выглядит так:

string str1 = Server.HtmlEncode(TextBox1.Text);
Response.Write(Server.HtmlDecode(str1));

Если пользователь ввел текст с двумя абзацами, str1 показывает символы \ r \ n \ r \ n между абзацами. но когда он выводит его на экран, просто добавьте 2-й абзац к 1-му. Пока расшифровываю, почему не выводит 2 абзаца?


person elenor    schedule 16.04.2010    source источник


Ответы (3)


Простым решением было бы сделать:

string str1 = Server.HtmlEncode(TextBox1.Text).Replace("\r\n", "<br />");

Предполагается, что вы заботитесь только о правильных <br /> тегах. Если вам нужен настоящий форматтер, вам понадобится библиотека, подобная предложенной Aaronaught.

person Kelsey    schedule 16.04.2010

Это не то, что делают HtmlEncode и HtmlDecode. Даже не близко.

Эти методы предназначены для «экранирования» HTML. < становится &lt;, > становится &gt; и так далее. Вы используете их, чтобы избежать ввода, введенного пользователем, чтобы избежать атак межсайтового скриптинга и связанных с ними проблем.

Если вы хотите иметь возможность вводить простой текст и преобразовывать его в HTML, подумайте о таком инструменте форматирования, как Markdown (я считаю, что Stack Overflow использует MarkdownSharp).

Если все, что вам нужно, это разрывы строк, вы можете использовать text.Replace("\r\n", "<br/>"), но работать с более сложными структурами, такими как упорядоченные списки, сложно, и для этого уже есть инструменты.

person Aaronaught    schedule 16.04.2010
comment
Я хочу отформатировать все типы ввода HTML в текстовой области, такие как разрыв строки, нумерованный список и т.д., независимо от того, что пользователь вводит, так же, как если бы я сейчас писал в текстовой области (при переполнении стека), и он будет печататься на экране, когда я вхожу . Ааронаут посоветовал мне использовать Markdown. Но есть ли какая-либо встроенная функция в .net framework, с помощью которой я могу достичь этой функции? Спасибо всем, кто ответил на этот вопрос. - person elenor; 18.04.2010
comment
@elenor: Нет, такого рода вещи определенно не встроены в .NET Framework. Вот почему существуют такие проекты, как MarkdownSharp. - person Aaronaught; 18.04.2010

HTML не распознает \ r \ n как разрыв строки. Преобразуйте их в теги «p» или «br».

person jvenema    schedule 16.04.2010