2012-04-16 179 views
1

我在我的代碼中構建的字符串有一個小問題。當我調試我的頁面時,url不正確。例如,當點擊我的網頁上的鏈接時,Google的網址就是這個。 http://www.google.co.uk%22%22/Stringbuilder將%添加到URL的末尾

請參閱下面的代碼。

sb.Append(@"<a href=" + r["Url"].ToString() + "\"" + @""" target=""blank"">"); 
sb.Append(@"<img src=""../ShowImage.ashx?id=" + r["Image_id"] + "\" title=\"" + r["Title"].ToString() + "\" alt=\"" + r["Alt_text"].ToString() + "\" >"); 
sb.Append("</a>"); 

在我如何建立我的字符串方面有錯誤嗎?

謝謝。

+3

這當然不是stringbuilder的錯。我注意到你的'href'不是以'''開始的,你可能打開了某種形式的html injection/xss。 – CodesInChaos 2012-04-16 11:45:47

+0

sb.Append(@「」); – Ramesh 2012-04-16 11:46:15

+0

此外,爲什麼即使在使用StringBuilder的時候也要聯合字符串? – Ramesh 2012-04-16 11:46:43

回答

1

你混合報價逃脫\"\"")用引號用「(@""")逃了出來,有一個已經太多。試試這個:

sb.Append(@"<a href=""" + r["Url"].ToString() + @""" target=""blank"">"); 
+0

感謝這工作。 – 2012-04-16 12:01:50

0

%22"

嘗試的字符串編碼版本:

sb.Append(@"<a href=" + r["Url"].ToString() + "\ + @""" target=""blank"">"); 
0

這是因爲你沒有任何配額URL之前的灰色標記,但後面有兩個引號。可以省略引號(對於沒有空格的值),但是您必須省略這兩個引號。當您省略起始引號時,最後的引號(或本例中的標記)成爲值的一部分。

另外,當你有一個StringBuilder時,爲什麼要連接字符串?直接使用Append方法,而不是首先連接字符串,然後附加結果。

sb 
    .Append("<a href=\"").Append(r["Url"].ToString()).Append("\" target=\"blank\">") 
    .Append("<img src=\"../ShowImage.ashx?id=").Append(r["Image_id"]).Append("\" title=\"").Append(r["Title"].ToString()).Append("\" alt=\"").Append(r["Alt_text"].ToString()).Append("\">") 
    .Append("</a>");