在C#中生成奇怪的标记

时间:2013-01-04 20:46:27

标签: c# asp.net html abbr

我有以下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>

但是,有一个神秘的标签出现了。在谷歌浏览器中,我看着控制台,我看到它看起来像这样:

<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 个答案:

答案 0 :(得分:2)

使用

sb.Append("</abbr>");

可能\abbr被解释为转义字符\a,后跟bbr>文本

顺便说一下,at the escape sequences on MSDN看起来\a似乎是BELL角色的转义序列。 (不,我认为你不应该听到你的电脑发出哔哔声)

答案 1 :(得分:2)

您的结束标记错误。它应该是</abbr>而不是<\abbr>

<\abbr>将在a内包含转义<bbr>(无意义)。 Chrome显然会关闭<abbr>标记。因此,多余的标记实际上是</abbr>而不是<bbr>

答案 2 :(得分:1)

只是猜测,但是因为你的结束标签中有反斜杠而不是斜杠?

sb.Append("<\abbr>");

VS

sb.Append("</abbr>");

答案 3 :(得分:1)

正如其他人所说,这就是问题所在:

sb.Append("<\abbr>");

...但是值得看完全发生了什么。

即附加<,然后是U + 0007(“警告”字符或铃声),然后是bbr>。如果您使用不是有效转义字符(例如"<\zfoo>")的字符完成此操作,那么您将收到编译时错误。在其他一些情况下,您可能已经能够在HTML中看到它。这只是因为你选择了一个看不见的完全看不见的控制角色。

顺便说一句,我不认为我曾经看过需要\a的C#程序。我希望它不是一个有效的转义字符 - 以及\x十六进制序列......

答案 4 :(得分:1)

以下是您的方法的理解方式

    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();
    }

“\”是转义字符:)