我有以下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是一个等于我想要显示的文本的字符串。
答案 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();
}
“\”是转义字符:)