Как правильно закодировать ссылку mailto?

Я создаю некоторый 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 целиком? Я пишу HTML URL-адреса, поэтому немного не понимаю...

@ Квентин, это то, что ты описываешь? (Изменил &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)));

person Scott Stafford    schedule 26.09.2011    source источник
comment
Ваша первая версия почти верна, за исключением того, что вы должны раскодировать &s. Вы назначаете его свойству Text. Он должен позаботиться о внутренней кодировке HTML. Единственное, о чем вам нужно беспокоиться, это допустимый URI.   -  person Ilia G    schedule 27.09.2011
comment
@liho1eye @liho1eye: я думаю, что это верно только для литерала ASP, если myLiteral.Mode == Encode, что не является значением по умолчанию. Но вторая версия должна дать тот эффект, которого вы добивались, да?   -  person Scott Stafford    schedule 27.09.2011


Ответы (1)


Вы помещаете некоторый контент в URL-адрес, а затем представляете этот URL-адрес в HTML. Итак, URLEncode, а затем HTMLEncode то, что вы получаете от URLEncode.

person Quentin    schedule 26.09.2011
comment
Я пробовал .. 2-я версия кода в моем вопросе, что вы имели в виду? - person Scott Stafford; 27.09.2011
comment
Я бы пошел с первым. Или смесь двух. Htmlattributeen, кодирующий все значение, и URL-адрес, кодирующий значения, вставленные в URL-адрес. - person Erlend; 28.09.2011
comment
@Yuck - Это действительно ответ. Второе предложение точно описывает, что нужно сделать. - person Quentin; 02.07.2014
comment
@ScottStafford — только что увидел комментарий (2,5 года спустя), да. - person Quentin; 02.07.2014