工具提示编码问题

4
<asp:HyperLink ID="TestHyperLink" runat="server"></asp:HyperLink>

我正在使用上面的超链接。我只是用以下代码设置文本:
string textFromUser = "This is test's.";
string encodedText=HttpUtility.HtmlEncode(textFromUser);
TestHyperLink.Text = encodedText;
TestHyperLink.ToolTip = encodedText;

问题在于超链接的文本是正确的,但工具提示显示的是编码字符。 enter image description here 我该如何使工具提示与文本以相同的方式呈现?
3个回答

8
您看到这个问题是因为属性值被编码了两次。
1.字符“'”被编码为“&#39;”; 2.字符“&”被编码为“&amp;”。
最后输出到浏览器的是“title =“This is test&amp;quot;s.””。由于属性值已经默认被编码,您可以安全地将Tooltip属性设置为原始文本,并仅对Text属性的文本进行编码。
注意:在这种情况下,默认情况下执行属性编码,但.NET版本4.0之前的HtmlEncode未对“'”字符进行编码。请参见HtmlEncode and UrlEncode Now Encode Single Quotation Marks更新: 我做了一些谷歌搜索,发现了这个有趣的参考文献(哪些ASP.NET控件会自动编码?),可能已经过时,但至少对于这个特定的情况,文档记录的行为是你得到的。

有没有文档可以查看ToolTip是否默认编码?这个功能是特定于.NET 4或更高版本吗? - Rocky Singh
我更新了答案,但是我无法回忆起我在哪里读到的。 - João Angelo

1
如前所述,ASP.NET控件的ToolTip属性会在输出/渲染时自动编码该值。
这意味着将工具提示设置为纯文本是安全的,因为页面会在渲染时对文本进行清理。
Label1.ToolTip = "Some encoded text < Tag >"

呈现HTML输出如下:
<span title="Some encoded text &lt; Tag >"></span>

如果您需要使用已编码的文本,可以设置标题属性:
Label1.Attributes("title") = "Some encoded text &lt; Tag &gt;"

将HTML输出呈现为:
<span title="Some encoded text &lt; Tag &gt;"></span>

0

看起来工具提示不需要像文本一样进行编码。

尝试直接使用textFromUser设置ToolTip,而不是使用encodedText


这个“始终对浏览器进行输出清理”怎么样?https://dev59.com/RE7Sa4cB1Zd3GeqP5rPk? - Rocky Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接