Должен ли плюс быть закодирован в mailto: гиперссылки?

При размещении адреса электронной почты с тегом адреса (aka sub-address) в mailto гиперссылка â € |

<a href = "mailto: [email protected]"> напишите нам сейчас! </a>

â € | должен ли плюс в письме быть закодирован в URL?

<a href = "mailto: username%[email protected]"> напишите нам сейчас! </a>

Я не могу понять это, и документация противоречива. Наши тесты в реальном мире также дали смешанные результаты, что еще более сбивает с толку.

39 голосов | спросил Jeff Atwood 25 J0000006Europe/Moscow 2011, 22:53:26

7 ответов


21

Плюс используется для кодирования пробелов в URL-адресах, а не в HTML, а не в SMTP (RFC2821). Однако, поскольку mailto: [email protected] является URI (он имеет протокол, разделитель протокола и адрес протокола), тогда он должен быть обрабатывается как URI, и он должен быть закодирован в процентах .

Следовательно, клиент должен точно решить кодированное представление и декодировать его насколько это уместно. Вот официальное заявление Microsoft по этому вопросу .

Вы должны применять кодировку URL-адресов на mailto: URL-адресах, встроенных в HTML, если символы в адресе электронной почты зарезервированы URI. Это гарантирует, что вы делаете правильную вещь. Клиент должен декодировать URI соответствующим образом, откуда он получен. Да, [email protected] - очень действительный адрес электронной почты; yes this%[email protected] также действителен. Да, эти две разные, но будут ли они обрабатываться по-другому, зависит от клиента ...

Как вы уже отметили, не все клиенты делают это правильно. Я предлагаю найти наиболее вероятного клиента (gmail? Браузерные клиенты? Outlook?), Которые ваши пользователи будут использовать и делать то, что делает этот клиент. Вы сказали, что вы проверили на GMail? Как вы его протестировали? С помощью браузера mailto: client (например, надстройки для firefox и gmail) URI скорее всего не будет декодироваться (как и должно быть).

ответил supercat 22 62014vEurope/Moscow11bEurope/MoscowSat, 22 Nov 2014 00:36:02 +0300 2014, 00:36:02
7

Вы МОЖЕТЕ закодировать +, но вам не нужно.

Во-первых, нам нужно согласиться с тем, что mailto является примером общего URI, указанного RFC 2396 . (Это то, что используют XHTML и HTML 4).

Теперь давайте узнаем список зарезервированных символов в RFC 2396.

reserved = ";" | "/" | "?" | ":" | "@" | "& Амп;" | "=" | "+" |
              "$" | ""

URI разбивается на абсолютное и относительное:

URI-reference = [absoluteURI | relativeURI] ["#" фрагмент]

И поскольку указан параметр mailto:, это абсолютный URI:

absoluteURI = схема ":" (hier_part | opaque_part)

И поскольку оба шаблона для hier_part начинаются с /, mailto - непрозрачная часть.

opaque_part = uric_no_slash * uric

uric_no_slash = unreserved | сбежал | ";" | "?" | ":" | "@" |
                "& Амп;" | "=" | "+" | "$" | ""

uric = зарезервировано | unreserved | спасся

Таким образом, ограничение состоит в том, что вам нужно выйти из /, если речь идет о первом символе, но после этого вы можете поместить зарезервированные символы, включая + и @.

Вот еще один RFC для поддержки этого. В последней версии RFC-схемы mailto, опубликованной в 2010 году под названием RFC 6068 , говорится:

  

Программное обеспечение, создающее 'mailto' URI также должно быть осторожным для кодирования   любые зарезервированные символы, которые используются. HTML-формы - это один из видов   которое создает 'mailto' URI. Кодирование текущей реализации   пробел как '+', но это создает проблемы, потому что такой '+'   для пробела нельзя отличить от реального '+' в 'mailto'   URI. При создании URI 'mailto' все пробелы ДОЛЖНЫ кодироваться как   % 20, а символы '+' МОГУТ быть закодированы как % 2B. Обратите внимание, что '+'   символы часто используются как часть адреса электронной почты для   укажите субадрес, например, в <[email protected]>.

ответил Eugene Yokota 25 J0000006Europe/Moscow 2011, 23:51:26
7

В строгом чтении соответствующего RFC говорится, что символ «+» должен быть закодирован.

Раздел 2, начало страницы 2 на http://tools.ietf.org/html/rfc2368 говорит:

  

"Обратите внимание, что все URL зарезервированы   символы в «to» должны быть закодированы: в   конкретные, круглые скобки, запятые,   и знак процента («%»), который   обычно встречаются в "почтовом ящике"   Синтаксис ".

RFC для URI (http://tools.ietf.org/html/rfc3986#section-2.2) перечисляет «+» как зарезервированный символ.

Тем не менее, что является «правильным», это не обязательно то, что будет работать во всех браузерах. Некоторые браузеры, очевидно, всегда будут обрабатывать правильные вещи, как если бы они были неправильными и неправильными, как будто они были правы.

Изменить: что касается RFC6068 и его «MAY», я бы прочитал это как зависящее от контекста. Если вы пишете URL-адрес для чтения текста, тогда «+» будет иметь больше смысла, однако , если вы пишете его в HTML, то более строгая интерпретация RFC3986 будет более сложной с идеями «правильного HTML» и поэтому все, что использует значение, должно ожидать, что оно будет закодировано.

ответил IBBoard 25 J0000006Europe/Moscow 2011, 23:07:42
6

За новый RFC http://tools.ietf.org/html/rfc6068#section -5

... '+' МОЖЕТ быть закодирована как% 2B

Итак, я думаю, что ответ не так, но может быть?

ответил yuriismaster 25 J0000006Europe/Moscow 2011, 23:28:44
3

Я думаю, что это кодирование или нет, не будет иметь особого значения. Проблема заключается в почтовых клиентах. Для примера Yahoo Mail использует только дефис для адресации, тогда как gMail использует плюс.

Это мои 2 цента ...

EDIT: ответ ниже имеет твердую точку.

ответил Bruno 25 J0000006Europe/Moscow 2011, 23:01:53
3

RFC1738

  

3,5. MAILTO

     

Схема URL-адреса mailto используется для   назначить интернет-рассылку   адрес физического лица или услуги.   Нет дополнительной информации другое   чем почтовый адрес в Интернете,   настоящее или подразумеваемое.

     

URL-адрес mailto принимает форму:

mailto: <rfc822-addr-spec>
     

где ((   кодирование a) addr-spec, as   указанным в RFC 822 . В   mailto URL, нет зарезервированных   символы.

     

Обратите внимание, что знак процента («%»)   обычно используется в RFC 822   адресов и должны быть закодированы.

     

В отличие от многих URL-адресов, схема mailto   не представляет объект данных для   получить доступ непосредственно; здесь нет   смысл, в котором он обозначает   объект. Он имеет другое применение, чем   тип сообщения /внешнего тела в   MIME.

Поскольку нет зарезервированных символов, он должен быть закодирован.

ответил S.Skov 25 J0000006Europe/Moscow 2011, 23:24:42
3

Per RFC 6068 , как указано в ответах, вы МОЖЕТЕ кодировать знак плюса как % 2B.

Причина, по которой возникает путаница, заключается в том, что преобразование пространства в плюс не является частью стандартного кодирования URL-адреса, оно является частью кодирования параметров формы (т.е. application /x- WWW-форм-urlencoded )

Это как разница между PHP rawurlencode () и urlencode ().

Так что RFC 6068 говорит, что URL-адрес mailto: должен использовать стандартную кодировку URL-адреса «raw» (за

ответил Alnitak 26 J0000006Europe/Moscow 2011, 14:29:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132