c#中生成了奇怪的标签

本文关键字:标签 | 更新日期: 2023-09-27 17:50:47

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

c#中生成了奇怪的标签

结束标签错误。应该是</abbr>,而不是<'abbr>

<'abbr>将在<bbr>中包含一个转义的a(没有任何意义)。Chrome显然关闭了<abbr>标签。所以多余的标签实际上是</abbr>而不是<bbr>

使用

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

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

顺便说一下,看看MSDN上的转义序列,似乎'a是BELL字符的转义序列。(不,我不认为你应该听到哔哔声从你的电脑)

你的方法应该是这样的

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

"'"是转义字符:)

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

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

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

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

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

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

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

作为题外话,我不认为我曾经见过一个需要'a的c#程序。我希望它不是一个有效的转义字符-随着'x十六进制序列…