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;

問題は、ハイパーリンクのテキストは正しいのに、ツールチップにエンコードされた文字が表示されることです。 ここに画像の説明を入力

ツールチップをテキストと同じように表示するにはどうすればよいですか?

4

3 に答える 3

8

属性値が 2 回エンコードされているため、この問題が発生しています。

  1. 文字は;'にエンコードされます。&#39;
  2. &文字は にエンコードされます&amp;

最後に、出力は としてブラウザーに送信されtitle="This is test&amp;quot;s."ます。属性値はデフォルトですでにエンコードされているため、Tooltipプロパティを未加工のテキストに安全に設定し、プロパティのテキストのみをエンコードできTextます。

注:この場合、属性のエンコードはデフォルトで実行されますが、 4.0 より前の .NET バージョンでは文字HtmlEncodeがエンコードされませんでした。HtmlEncode および UrlEncode が一重引用符をエンコードする'を参照してください。

更新:私はいくつかのグーグルを行い、この興味深い参照(どの ASP.NET コントロールが自動的にエンコードしますか? ) を見つけましたが、少なくともこの特定のケースでは、文書化された動作はあなたが得たものです。

于 2012-07-23T14:52:48.853 に答える
1

前述のように、ASP.NET コントロールの ToolTip プロパティは、出力/レンダリング時に値を自動エンコードします。

これは、レンダリング時にページがテキストをサニタイズするため、ツールチップをプレーン テキストに設定しても安全であることを意味します。

Label1.ToolTip = "Some encoded text < Tag >"

HTML 出力を次のようにレンダリングします。

<span title="Some encoded text &lt; Tag >"></span>

すでにエンコードされているテキストを使用する必要がある場合は、代わりに title 属性を設定できます。

Label1.Attributes("title") = "Some encoded text &lt; Tag &gt;"

HTML 出力を次のようにレンダリングします。

<span title="Some encoded text &lt; Tag &gt;"></span>
于 2013-07-30T14:36:04.080 に答える
0

ツールチップは、テキストと同じようにエンコードする必要がないようです。

textFromUserの代わりにツールチップを直接設定してみてくださいencodedText

于 2012-07-23T14:37:35.453 に答える