0

我有以下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 是一个字符串,它等于我要显示的文本。

4

5 回答 5

2

采用

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

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

顺便说一句,查看MSDN 上的转义序列,这似乎\a是 BELL 字符的转义序列。(不,我认为您不应该听到 PC 发出哔哔声)

于 2013-01-04T20:49:19.260 回答
2

你的结束标签是错误的。应该</abbr>不是<\abbr>

<\abbr>a<bbr>. Chrome 显然关闭了<abbr>标签。所以多余的标签其实</abbr>不是<bbr>

于 2013-01-04T20:49:28.833 回答
1

只是一个猜测,但是否因为您的结束标记中有反斜杠而不是斜杠?

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

对比

sb.Append("</abbr>");
于 2013-01-04T20:49:31.373 回答
1

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

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

...但值得看看到底发生了什么。

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

顺便说一句,我认为我从未见过需要\a. 我希望它不是一个有效的转义字符 - 以及\x十六进制序列......

于 2013-01-04T20:53:03.167 回答
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();
    }

“\”是一个转义字符:)

于 2013-01-04T20:54:17.923 回答