HTMLencode HTMLdecode - PullRequest
       9

HTMLencode HTMLdecode

4 голосов
/ 16 апреля 2010

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

Пример моего кода такой:

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

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

Ответы [ 3 ]

12 голосов
/ 16 апреля 2010

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

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

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

2 голосов
/ 16 апреля 2010

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

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

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

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

0 голосов
/ 16 апреля 2010

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

...