Странный тег генерируется в C#
У меня есть следующее GetText()
функция, которая относится к моему вопросу, которая вызывается в следующем месте:
myGridView.DataSource = stuff.Select(s => new
{
//...some stuff here
f.Text = GetText();
}
myGridView.DataBind();
GetText выглядит следующим образом:
private void string GetText()
{
StringBuilder sb = new StringBuilder();
sb.Append("<abbr title=\"Testing\">");
sp.Append("This is the Text that I want to display");
sb.Append("<\abbr>");
}
По сути, все, что я хочу сделать, - это иметь следующий HTML-код на моей веб-странице:
<abbr title="Testing">This is the text that I want to display</abbr>
Тем не менее, есть таинственный тег, который появляется. В Google Chrome я посмотрел на консоль и увидел, что это выглядит так:
<abbr title="Testing">This is the text that I want to display<bbr></abbr>
Существует посторонний тег, который генерируется, когда я добавляю в строку sb.Append("<\abbr>");
Это исправлено, когда я удаляю эту строку, но я хотел бы найти лучшее решение, так как это делает код неуклюжим.
Я также попытался сделать следующее вместо многослойных sb.Appends()
но дополнительный текст по-прежнему отображается.
sb.Append(string.Format("<abbr title=\"testing\">{0}<\abbr>",Text));
ПРИМЕЧАНИЕ. Предположим, что Text - это строка, равная тексту, который я хочу отобразить.
5 ответов
Вот как должен выглядеть ваш метод
private string GetText()
{
StringBuilder sb = new StringBuilder();
sb.Append("<abbr title=\"Testing\">");
sb.Append("This is the Text that I want to display");
sb.Append("</abbr>");
return sb.ToString();
}
"\" - это спасательный персонаж:)
Ваш конечный тег неверен. Так должно быть </abbr>
не <\abbr>
,
<\abbr>
будет включать сбежавший a
(что ничего не значит), внутри <bbr>
, Хром видимо закрывает <abbr>
тег. Таким образом, лишний тег на самом деле </abbr>
не <bbr>
,
Использование
sb.Append("</abbr>");
вероятно \abbr
интерпретируется как escape-символ \a
с последующим bbr>
текст
Кстати, глядя на escape-последовательности на MSDN, кажется, что \a
является escape-последовательностью для символа BELL. (Нет, я не думаю, что вы должны слышать звуковой сигнал с вашего ПК)
Просто предположение, но разве это потому, что в закрывающем теге у вас есть обратный слеш вместо слеша?
sb.Append("<\abbr>");
против
sb.Append("</abbr>");
Как уже говорили другие, это проблема:
sb.Append("<\abbr>");
... но стоит посмотреть , что именно происходит.
Это добавление <
, затем U+0007 ("тревожный" символ или колокольчик), затем bbr>
, Если вы сделали это с персонажем, который не был допустимым escape-символом (например, "<\zfoo>"
) тогда вы получили бы ошибку во время компиляции. В некоторых других случаях вы могли бы увидеть это в HTML. Только потому, что вы выбрали совершенно невидимого управляющего персонажа, его было сложнее увидеть.
Кроме того, я не думаю, что когда- либо видел программу на C#, которая требовала \a
, Хотелось бы, чтобы это был недопустимый побег - вместе с \x
шестнадцатеричная последовательность...