2011-09-26 11 views
7

Generuję kod HTML i chcę wygenerować link bezpieczny dla bazy danych XSS i bazy danych mailto. Jakie jest właściwe kodowanie do zastosowania tutaj? Jak to się dzieje?Jak poprawnie zakodować link 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)); 

Czy powinienem używać tutaj UrlEncode? HtmlEncode? Czy to, co zrobiłem, to całość? Piszę kod HTML adresu URL, więc jestem trochę niejasny ...

@Quentin, czy to opisujesz? (Zmienione & s do & ponieważ mam zamiar 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

Twoja pierwsza wersja jest prawie poprawna, z wyjątkiem tego, że powinno się odblokować '&' s. Przypisujesz go do właściwości Text. Powinien zająć się kodowaniem HTML wewnętrznie. Jedyne, o co musisz się martwić, to fakt, że jest to poprawny URI. –

+1

@ liho1eye: Myślę, że to jest prawdziwe tylko dla Literału ASP, jeśli myLiteral.Mode == Encode, który nie jest domyślny. Ale druga wersja powinna mieć taki efekt, jaki masz, tak? –

Odpowiedz

6

wkładacie pewne treści w adresie URL, a następnie reprezentujący ten adres URL w HTML. Więc URLEncode to następnie HTMLEncode, co otrzymasz z URLEncode.

+0

Próbowałem .. to druga wersja kodu w moim pytaniu, co miałeś na myśli? –

+0

Poszedłbym z pierwszym. Lub połączenie obu. Htmlattributeencoding całą wartość i kodowanie url wartości wprowadzonych do adresu URL – Erlend

+0

@Yuck - To jest naprawdę odpowiedź. Drugie zdanie dokładnie opisuje, co należy zrobić. – Quentin