ASP.NET自动转义字符?

时间:2011-08-16 19:50:44

标签: javascript .net alert

我正在使用.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:repeater中的.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;"

3 个答案:

答案 0 :(得分: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文件中的静态字符串。

答案 1 :(得分:0)

\'由C#解释与'完全相同。为了在结果中包含文字反斜杠,您需要转义反斜杠本身:

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

答案 2 :(得分:0)

你尝试过双正斜线吗? \'或者你可以尝试用它的HTML代码替换撇号&apos;