2011-09-26 123 views
7

我正在生成一些HTML,我想生成一個XSS和數據庫內容安全的mailto鏈接。什麼是適當的編碼在這裏使用?這個怎麼樣?如何正確編碼郵件鏈接?

myLiteral.Text = string.Format(
    "mailto:{0}?Content-Type=text/html&Subject={1}&body={2}", 
    HttpUtility.UrlEncode(email_address), 
    HttpUtility.UrlEncode(subject), 
    HttpUtility.UrlEncode(body_message)); 

我應該使用UrlEncode這裏? HtmlEncode?做我做的,然後HtmlEncode整體?我正在編寫一個URL的HTML,所以我有點不清楚...

@Quentin,這是你在描述什麼? (改變& s到&,因爲我即將HtmlEncode ...)

myLiteral.Text = 
    HttpUtility.HtmlEncode(HttpUtility.UrlEncode(
    string.Format(
     "mailto:{0}?Content-Type=text/html&Subject={1}&body={2}", 
     email_address, subject, body_message))); 
+0

您的第一個版本幾乎是正確的,除非您應該取消編碼'&'。您正在將其分配給Text屬性。它應該在內部處理HTML編碼。唯一需要擔心的是它是一個有效的URI。 –

+1

@ liho1eye:我認爲這隻適用於ASP Literal,如果myLiteral.Mode == Encode,這不是默認值。但是第二個版本應該有你想要的效果,是嗎? –

回答

6

你把一些內容的URL,然後代表的HTML URL。所以URLEncode然後HTMLEncode你從URLEncode得到。

+0

我試過..是在我的問題中的代碼的第二個版本你有什麼想法? –

+0

我會去第一個。或者是兩者的混合。 Htmlattributeencoding整個值,並url編碼插入到url – Erlend

+0

@Yuck - 這真的是一個答案。第二句描述了需要完成的工作。 – Quentin