Подтвердить что ты не робот

Как визуализировать закодированные теги как правильный HTML, а не текст?

Я получаю следующий текст из базы данных: (поставляется клиентом, поэтому я не могу много сделать с ним)

investment professionals.<BR /><BR /> blah blah blah

который отображается как:

investment professionals.<BR /><BR /> blah blah blah

Я не хочу печатать теги <BR /> на экране. Я хочу, чтобы они вели себя как настоящие перерывы.

Следующий код Html Helper создает диапазон, в котором он существует, добавляет его в div и возвращает строку HTML:

StringBuilder sbElements = new StringBuilder();

TagBuilder span = new TagBuilder("span") {InnerHtml = subject.AboutText};
sbElements.Append(span.ToString());

TagBuilder div = new TagBuilder("div");
div.MergeAttribute("class", "about-text");
div.InnerHtml = sbElements.ToString();

return div.ToString();

Если я Html.Encode() вывод вспомогательного метода, закодированные теги - /&gt;&lt; - будут записаны на экран. Как я могу взять исходный текст, который у меня есть, и гарантировать, что теги будут отображаться как HTML, а не текст?

4b9b3361

Ответ 1

Попробуйте следующее:

    String Input = "investment professionals.&lt;BR /&gt;&lt;BR /&gt; blah blah blah";

    String Output = Server.HtmlDecode(Input);

Ответ 2

Если вы используете Razor, он будет дважды кодировать вашу строку, как описано в @Chevex. Если вы используете новый синтаксис MVC3 <%: %>, он также будет дважды закодировать его. Независимо от вашего механизма просмотра вы можете обойти кодировку с помощью маршрута IHtmlString (например, MvcHtmlString), описанного в @Chevex, или обход кодировки по умолчанию с использованием другого синтаксиса шаблонов.

В дальнейшем, который не требует изменения какого-либо кода, просто требуется настройка синтаксиса, который вы используете для рендеринга в представление.

Для бритвы:

@Html.Raw(yourvariable)

Для системы шаблонов по умолчанию MVC:

<%=yourvariable%>

Ответ 3

Измените return div.ToString() на MvcHtmlString.Create(div.ToString()), а метод возвращает тип MvcHtmlString вместо string. Это предотвратит автоматическое кодирование вывода из механизма просмотра.

Возврат MvcHtmlString - стандартная практика для вывода HTML-кода через вспомогательные методы.

Что происходит, так это то, что вы декодируете значение из базы данных, а механизм просмотра перекодирует его при его рендеринге. Механизм просмотра Razor автоматически HTML кодирует вывод в ваших представлениях, если он не является MvcHtmlString. Возврат MvcHtmlString остановит это.

public static MvcHtmlString MyNonHtmlEncodedOutput(this HtmlHelper html)
{
        StringBuilder sbElements = new StringBuilder();

        TagBuilder span = new TagBuilder("span") {InnerHtml = Server.HtmlDecode(subject.AboutText)};
        sbElements.Append(span.ToString());

        TagBuilder div = new TagBuilder("div");
        div.MergeAttribute("class", "about-text");
        div.InnerHtml = sbElements.ToString();

        return MvcHtmlString.Create(div.ToString());
}

Ответ 4

Вы можете попробовать следующее:

 String Input = "&lt;p&gt;New Appartments is Avaliable at very Reasonable Price&lt;/p&gt;";
 String Output = Server.HtmlDecode(Input);
 string _output = System.Text.RegularExpressions.Regex.Replace(Output, "<.*?>", string.Empty);

Ответ 5

Вы действительно хотите использовать Html.Decode(string). Это преобразует закодированные символы, такие как &lt; в <.

Ответ 6

Просто чтобы добавить мои выводы к этому вопросу, поскольку я изо всех сил пытался использовать & times; таким образом.

SetInnerText() будет html кодировать весь текст по умолчанию, тогда как InnerHtml не кодирует ничего, поскольку он ожидает raw html.

Итак, если у меня есть это правильно, вам придется сначала декодировать вашу текстовую строку, чтобы получить некодированные теги (т.е. <br/>), а затем установить это в свойство InnerHtml, и теги будут отображается как html.

чтобы у вас было что-то вроде

element.InnerHtml = Server.HtmlDecode(yourText);