2011-08-16 8 views
1

...ASP.NET自動エスケープ文字?私は.ASPX.CSページに含まれている次のコードで働いている

img = "<img src=\"" + yellow + "\" align=\"middle\" onclick=\"alert('You are the current high bidder but the auction's minimum bid reserve has not been met. You need to increase your max bid until the reserve has been met to have a chance in winning this domain auction.');return false;\" class=\"sBtnImg\" alt=\"\" />"; 

それは、ASP内.aspxページに書き込まれます:リピーター次...

を使用して
<%# getAuctionFlag(Eval("AuctionAmt").ToString(), Eval("WinningBid").ToString(), Eval("UserMaxBid").ToString(), Eval("AuctionTypeDesc").ToString(), "", Eval("BidStatus").ToString())%> 

私が抱えている問題は、アラートにオークション内の一重引用符が含まれており、エスケープしようとするすべての試みが失敗したことです。私は\ 'と'を試しましたが、.NETがHTMLとしてレンダリングされる前にエスケープします。だから私は

onclick="alert('TEXTHERE' TEXTHERE');return false;" 

答えて

1

だとアポストロフィを交換しようとすることができ、単一のバックスラッシュ、引用符は、C#の文字列リテラル構文レベルで(バック単一引用符に)解釈します。 \'シーケンスをHTMLレベルに渡す必要があります。これは、文字列リテラルとして\\'を使用する必要があることを意味します。

より良い長期的な答えは、文字列のコンテキストのネストを停止することです。 C#文字列リテラル内のHTMLマークアップ内にJavaScriptコードがある場合、それは一度に考えなければならないエスケープの複数のレベルであり、人間はそれをうまく行っていません。 、一度にダウン脱出レベルを破る可能な場合、代替引用符を使用して、あなたができる代わりに、コードの属性にデータを置く:

string warning= (
    "You are the current high bidder but the auction's minimum bid reserve "+ 
    "has not been met. You need to increase your max bid until the reserve "+ 
    "the reserve has been met to have a chance in winning this domain auction." 
); 

string html= String.Format(
    "<img src='{0}' class='sBtnImg' title='{1}' onclick='alert(this.title);'/>", 
    HttpUtility.HtmlEncode(yellow), 
    HttpUtility.HtmlEncode(warning) 
); 

まだよく、onclickを省略し、クリックをキャッチし、動作を追加するために控えめなJavaScriptを使用しますclassに依存します。次に、警告テキストは.jsファイル内の静的な文字列にすることができます。

0

\' ...で終わるが'とまったく同じC#によって解釈されます。結果ではリテラルのバックスラッシュを含めるためには、あなたは、バックスラッシュ自体をエスケープする必要があります。

" ... auction\\'s ..." 
0

あなたは二重のforwardslashを試みたことがありますか? \」

それともHTMLコード&apos;

関連する問題