Текст у форматі HTML


136

Як я можу отримати текст для використання html у C #? Я хочу зробити

sample="<span>blah<span>"

і мати

<span>blah<span>

відображатись як звичайний текст замість благ лише з тегами, що є частиною html :(. Використання C # not ASP

c#  html  escaping 

Відповіді:


185
using System.Web;

var encoded = HttpUtility.HtmlEncode(unencoded);

3
Якщо ви хочете , щоб закодувати символи Юнікоду в не-юнікод, перевірити це: stackoverflow.com/questions/82008 / ...
Gyuri

4
Щось, що вам не хочеться з’ясувати погано: вищевказаний метод сам по собі не уникає контрольних символів. Дивіться прийняту відповідь тут: stackoverflow.com/a/4501246/1543677 і використовуйте обидва.
pkExec

HttpUtility більше не існує (виграйте магазини додатків)
Tertium

82

Крім того, ви можете використовувати це, якщо ви не хочете використовувати System.Webзбірку:

var encoded = System.Security.SecurityElement.Escape(unencoded)

Згідно з цією статтею , різниця між System.Security.SecurityElement.Escape()і System.Web.HttpUtility.HtmlEncode()полягає в тому, що колишній також кодує (')символи апострофа .


7
Не кажучи про SecurityElement.Escape()втечу для XML, який не є точно HTML.
Віктор Сергієнко

System.Security.SecurityElement не існує в додатках магазину Windows
Tertium

47

Якщо ви використовуєте .NET 4 або новішої версії і не хочете посилатися System.Web, ви можете скористатися WebUtility.HtmlEncodeзSystem

var encoded = WebUtility.HtmlEncode(unencoded);

Це має такий же ефект, як HttpUtility.HtmlEncodeі слід віддавати перевагу над System.Security.SecurityElement.Escape.


Чому слід віддати перевагу SecurityElement.Escape? Чи є вразливості в останніх, чи перша просто більш здатна?
Тревіс

7
@Travis У жодних вразливих місць немає, він просто SecurityElement.Escapeпрацює на XML і HtmlEncodeпрацює на HTML, а кодування XML та HTML має дещо інші вимоги (детальніше див. Цю відповідь ). Так, наприклад, SecurityElement.Escapeдозволено використовувати &apos;, поки HtmlEncodeні.
Олексій

1
@Travis Я думаю, що ще кращим "приводом" є те, що System.Net доступний для бібліотек портативного класу, а інші два варіанти не / не здаються сьогодні вранці. ; ^)
ruffin

19

ще ніхто не згадував, в ASP.NET 4.0 є новий синтаксис для цього. замість

<%= HttpUtility.HtmlEncode(unencoded) %>

ви можете просто зробити

<%: unencoded %>

докладніше читайте тут: http://weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax-for-html-encoding-output-in-asp-net-4-and- asp-net-mvc-2.aspx


1
будь ласка, дайте синтаксис для Razor? @Nacht

6

.NET 4.0 і вище:

using System.Web.Security.AntiXss;
//...
var encoded = AntiXssEncoder.HtmlEncode("input", useNamedEntities: true);

5

Ви можете використовувати фактичні теги html <xmp>та </xmp>виводити рядок так, як показувати всі теги між тегами xmp.

Або ви також можете використовувати на сервері Server.UrlEncodeабо HttpUtility.HtmlEncode.


Я зробив питання більш зрозумілим. Я не хочу, щоб теги були частиною html, як користувач може це робити </pre> та розбивати його.

Чудовий пост дякую людині це виправлено саме те, що я шукав!
Спец

1
<xmp>застаріли давно: stackoverflow.com/questions/8307846 / ... використання <pre>замість
mortb

1

Тут цього не бачили

System.Web.HttpUtility.JavaScriptStringEncode("Hello, this is Satan's Site")

це єдине, що працювало (asp 4.0+) при роботі з html подібним. Отримані дані &apos;відображаються як '(за допомогою htmldecode) у html, що призводить до відмови:

<a href="article.aspx?id=268" onclick="tabs.open('modules/xxx/id/268', 'It&apos;s Allstars'); return false;">It's Allstars</a>

1

є кілька спеціальних символів цитат, які не видаляються HtmlEncode і не відображатимуться в Edge або IE правильно, як "і". ви можете замінити цих символів чимось на зразок функції нижче.

private string RemoveJunkChars(string input)
{
    return HttpUtility.HtmlEncode(input.Replace("”", "\"").Replace("“", "\""));
}

Ви, ймовірно, подаєте вміст, використовуючи неправильне кодування. IE і Edge не мають проблем із відображенням таких символів.
Буке

0

Для тих, хто в майбутньому шукає простий спосіб зробити це на сторінках Razor, використовуйте наступне:

В .cshtml:

@Html.Raw(Html.Encode("<span>blah<span>"))

В .cshtml.cs:

string rawHtml = Html.Raw(Html.Encode("<span>blah<span>"));
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.