FreeToGenerate.com

Collez une URI tel: et voyez ce que la grammaire en fait : si elle est valide, ce que signifie chaque partie, et sa forme canonique. L’outil compare aussi deux URI selon les cinq règles de la norme, qui ne coïncident pas avec la comparaison des chaînes. Rien n’est envoyé.

Essayez-en un :

Collez-en une, ou tapez un numéro et regardez ce que la grammaire en fait. Le nom du schéma est insensible à la casse.

Ceci n’est pas une URI tel: valide.

Un numéro local doit porter un phone-context. La grammaire le place à l’intérieur de local-number : un numéro local seul n’est donc pas une URI tel: du tout. Ajoutez ;phone-context= avec un domaine ou un préfixe global, ou écrivez le numéro en forme globale, en commençant par +.

Deux URI désignent-elles le même numéro ?

La RFC 3966 donne un algorithme en cinq règles pour cela, et il ne coïncide pas avec la comparaison des chaînes. Deux URI d’apparence différente peuvent être le même numéro, et deux qui diffèrent d’un paramètre ne le sont pas.

Équivalentes : le même numéro.

Tout se passe dans votre navigateur. Rien de ce que vous saisissez n’est envoyé.

Aussi disponible en : English · Español · Português · العربية

Générateur de lien tel: et pourquoi tel:555-1234 n’est pas valide

Construisez un lien tel: conforme et comparez-en deux avec l’algorithme d’égalité de la RFC 3966.

Qu’est-ce qu’un lien tel: ?

Une URI tel: est la manière dont une page web remet un numéro de téléphone à ce qui, sur l’appareil du lecteur, passe les appels. On la met dans un href, on tape dessus et l’appel part : jusque-là, tout le monde le sait. Ce que presque personne ne sait, c’est que tel: possède une véritable grammaire, définie par la RFC 3966, et que l’écriture montrée par à peu près tous les tutoriels ne la respecte pas.

Cette grammaire a deux formes. Un numéro global commence par un plus et ne comporte que des chiffres décimaux — tel:+33123456789 — et se suffit à lui-même partout dans le monde. Un numéro local ne commence pas par un plus, et la grammaire exige qu’il porte un paramètre phone-context indiquant où il est valable : tel:863-1234;phone-context=+1-914. Ce paramètre n’est pas un ornement facultatif. Il figure dans la production local-number elle-même, si bien qu’un simple tel:555-1234 n’est pas une URI tel: incomplète : ce n’est pas une URI tel:.

Cette page analyse ce que vous lui donnez au regard de cette grammaire, dit de quelle forme il s’agit et ce que signifie chaque partie, écrit la forme canonique, et — séparément — répond à la question de savoir si deux URI désignent le même numéro selon les règles de comparaison de la norme.

Comment l’utiliser

  1. Collez une URI tel:, ou tapez un numéro et regardez le verdict changer. Les cinq boutons d’exemple chargent des cas réels, à commencer par celui, invalide, que tout le monde écrit. Le nom du schéma est insensible à la casse, donc TEL: s’analyse aussi.
  2. Lisez les détails et les remarques. Le panneau de détails sépare le numéro tel qu’il est écrit du numéro servant à la comparaison, et indique si un phone-context est un domaine ou un numéro — ce qui change la façon de le comparer. Les remarques portent sur des choses valides mais bonnes à savoir, jamais sur des erreurs.
  3. Servez-vous du panneau de comparaison pour la question que les chaînes ne tranchent pas. Collez deux URI et il applique les cinq règles de la RFC 3966. Ses exemples comprennent deux URI d’apparence différente qui sont le même numéro, et une paire qui ne diffère que d’un paramètre et n’en est donc pas un.

Pourquoi tel:555-1234 échoue, et quoi écrire à la place

L’ABNF concernée tient en trois lignes. La partie abonné est soit un global-number, soit un local-number ; global-number n’est que des chiffres avec des paramètres facultatifs ; et local-number s’écrit local-number-digits, puis des paramètres, puis context, puis d’autres paramètres. Comme context y figure sans la moindre condition, et que context est défini comme la chaîne « ;phone-context= » suivie d’un descripteur, un numéro local qui n’en a pas n’a tout simplement aucune dérivation.

Il y a deux corrections, et la norme en préfère une. La section 5.1 dit que tous les numéros doivent employer la forme globale à moins de ne pouvoir être représentés ainsi : la première réponse est donc d’écrire le numéro avec +, l’indicatif pays et le reste. Ce n’est que lorsqu’un numéro ne peut réellement pas s’exprimer globalement — le cas des postes d’un autocommutateur, des numéros courts et des numéros d’urgence — qu’on se rabat sur la forme locale en lui attachant un contexte : soit un nom de domaine identifiant le plan de numérotation, soit un préfixe global comme +33.

Il vaut la peine de préciser ce qui casse et ce qui ne casse pas. Un téléphone composera généralement tel:555-1234 quand même, parce qu’un composeur n’est pas un validateur et fait l’évident. Le coût, c’est que l’URI ne porte aucune information sur le plan de numérotation auquel ces chiffres appartiennent : tout ce qui doit l’interpréter plutôt que la composer — un annuaire, un CRM, une passerelle de click-to-call, tout ce qui compare deux fiches — devine. La grammaire existe précisément pour supprimer cette devinette.

Les règles de comparaison, que les chaînes manquent

La section 4 de la RFC 3966 définit quand deux URI tel: sont équivalentes, et c’est un véritable algorithme plutôt qu’une comparaison de texte. Les deux doivent être de la même forme. Les chiffres doivent être égaux après suppression de tous les séparateurs visuels — le trait d’union, le point et les parenthèses font partie de la grammaire et sont là pour être lus, si bien que tel:+1-555-0100 et tel:+15550100 sont le même numéro. Le phone-context est comparé comme un nom d’hôte quand c’est un domaine et chiffre par chiffre quand c’est un numéro, ce qui fait que EXAMPLE.COM. et example.com concordent, tandis que le cas numérique se compare séparateurs retirés. Les paramètres se comparent par nom, quel que soit l’ordre où ils apparaissent. Et toute la comparaison est insensible à la casse.

Une règle surprend : si un paramètre ne figure que dans l’une des deux URI, elles ne sont pas égales. Ainsi tel:+15550100 et tel:+15550100;ext=1 sont des numéros différents — ce qui est juste, une extension désignant un autre aboutissant — mais cela signifie qu’on ne peut pas retirer les paramètres qu’on ne comprend pas et comparer ce qui reste.

Il existe aussi une règle d’ordre normative que presque rien ne respecte. L’extension ou la sous-adresse RNIS vient en premier, puis phone-context, puis tous les autres paramètres par ordre alphabétique. La norme donne sa raison dans le même paragraphe : c’est pour qu’une URI tel: puisse être comparée caractère par caractère, ce qui est la façon dont SIP les compare. La forme canonique affichée ici applique cet ordre.

Limites assumées

Cet outil vérifie la grammaire de l’URI et rien d’autre. Il ignore si un numéro existe, si l’indicatif pays est réel, ou combien de chiffres compte le plan de numérotation de ce pays : c’est un autre métier, celui des bibliothèques dédiées aux numéros de téléphone, qui s’appuient sur un jeu de données, et il n’est délibérément pas tenté ici. Une URI peut être parfaitement conforme et rester un numéro auquel personne ne répond.

Il ne peut pas non plus dire si le contexte d’un numéro local est le bon, seulement qu’il s’agit d’un domaine ou d’un préfixe global syntaxiquement valide. Et la réponse sur l’égalité est celle de la RFC 3966, qui porte sur des URI : deux URI différentes peuvent aboutir au même téléphone dans le monde réel, par un routage qu’aucune comparaison de texte ne saurait connaître.

Une chose à savoir sur la plateforme : rien de tout cela ne vous est offert par le navigateur. Comme tel ne fait pas partie des schémas spéciaux de la norme URL, new URL rend toute la partie abonné sous forme de chemin opaque, ne valide rien — il accepte tel:555-1234 sans broncher — et comparer deux objets URL par href déclare tel:+1-555-0100 et tel:+15550100 différents. Ce n’est pas un défaut : un analyseur d’URI générique répond à une question générique. Mais cela veut dire que chaque affirmation de cette page doit être calculée, non empruntée.

Pourquoi est-ce gratuit ?

Ce sont une grammaire et une comparaison en cinq règles, et votre navigateur exécute les deux au fil de la frappe. Aucun serveur n’intervient : il n’y a donc rien à facturer ni de compte à créer.

Rien n’est envoyé. Les numéros que vous collez restent dans cet onglet.