Должен ли кодироваться плюс в тел URI?
В URI пробелы могут быть закодированы как +
, Поскольку это так, следует ли кодировать начальный плюс при создании телефонных URI с международным префиксом?
Что лучше? Оба работают на практике?
<a href="tel:+1234">Call me</a>
<a href="tel:%2B1234">Call me</a>
2 ответа
Нет.
Из раздела 3 RFC 3966 (телефонный URI для телефонных номеров):
Если зарезервированные символы "+", ";", "=" и "?" используются в качестве разделителей между компонентами URI "tel", они НЕ ДОЛЖНЫ кодироваться в процентах.
Вы бы только в процентах кодировать +
если это часть значения параметра:
Эти символы ["+", ";", "=" и "?"] ДОЛЖНЫ быть закодированы в процентах, если они появляются в значениях параметров URI tel.
Я не уверен, что ведущий +
, что указывает на то, что это глобальное число, считается разделителем, но определение глобального числа гласит:
Глобальные уникальные номера обозначаются лидирующим символом "+".
Так что это относится к +
, а не к чему-то процентному.
А также примеры ясно показывают, что он не должен кодироваться в процентах, например:
tel:+1-201-555-0123
Обратите внимание, что пробелы в tel
URI (например, в значениях параметров) могут не кодироваться +
, С помощью +
вместо %20
для символа пробела это не то, что может быть сделано в любом URI; это возможно только в URI, чья схема URI это явно определяет.
В схеме tel: URI нет места для кодирования - см. RFC 3966:
5.1.1. Separators in Phone Numbers
...
even though ITU-T E.123 [E.123] recommends the use of space
characters as visual separators in printed telephone numbers, "tel"
URIs MUST NOT use spaces in visual separators to avoid excessive
escaping.
Знак плюс кодирует пробел только в application/x-www-form-urlencoded
(тип содержимого по умолчанию для отправки формы - см. информацию о W3C: формы). Не существует правильного способа кодирования пробела в tel: URI. Смотрите снова RFC 3966 (стр. 5) для правильных визуальных разделителей.