Странный тег генерируется в 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 шестнадцатеричная последовательность...

Другие вопросы по тегам