Ответ 1
Попробуйте следующее:
String Input = "investment professionals.<BR /><BR /> blah blah blah";
String Output = Server.HtmlDecode(Input);
Я получаю следующий текст из базы данных: (поставляется клиентом, поэтому я не могу много сделать с ним)
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()
вывод вспомогательного метода, закодированные теги - /><
- будут записаны на экран. Как я могу взять исходный текст, который у меня есть, и гарантировать, что теги будут отображаться как HTML, а не текст?
Попробуйте следующее:
String Input = "investment professionals.<BR /><BR /> blah blah blah";
String Output = Server.HtmlDecode(Input);
Если вы используете Razor, он будет дважды кодировать вашу строку, как описано в @Chevex. Если вы используете новый синтаксис MVC3 <%: %>
, он также будет дважды закодировать его. Независимо от вашего механизма просмотра вы можете обойти кодировку с помощью маршрута IHtmlString (например, MvcHtmlString), описанного в @Chevex, или обход кодировки по умолчанию с использованием другого синтаксиса шаблонов.
В дальнейшем, который не требует изменения какого-либо кода, просто требуется настройка синтаксиса, который вы используете для рендеринга в представление.
Для бритвы:
@Html.Raw(yourvariable)
Для системы шаблонов по умолчанию MVC:
<%=yourvariable%>
Измените 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());
}
Вы можете попробовать следующее:
String Input = "<p>New Appartments is Avaliable at very Reasonable Price</p>";
String Output = Server.HtmlDecode(Input);
string _output = System.Text.RegularExpressions.Regex.Replace(Output, "<.*?>", string.Empty);
Вы действительно хотите использовать Html.Decode(string)
. Это преобразует закодированные символы, такие как <
в <
.
Просто чтобы добавить мои выводы к этому вопросу, поскольку я изо всех сил пытался использовать & times; таким образом.
SetInnerText() будет html кодировать весь текст по умолчанию, тогда как InnerHtml не кодирует ничего, поскольку он ожидает raw html.
Итак, если у меня есть это правильно, вам придется сначала декодировать вашу текстовую строку, чтобы получить некодированные теги (т.е. <br/>
), а затем установить это в свойство InnerHtml, и теги будут отображается как html.
чтобы у вас было что-то вроде
element.InnerHtml = Server.HtmlDecode(yourText);