Aller au contenu principal
CuteJSON
↑↓ Naviguer Enter Selectionner Esc Fermer

Comment encoder JSON en URL pour une requête

Publie 2 min de lecture Par Akash Kinkar Pandey

Une URL ne peut pas transporter un document JSON en l’état. Les accolades, les guillemets, les espaces et tout au-delà d’ASCII doivent être encodés en pourcents avant de pouvoir aller dans une requête ou un segment de chemin.

Utilisation de l’encodeur et décodeur URL JSON

Choisissez Encoder ou Decoder, collez votre document, et appuyez Convertir. L’encodage suit la même règle que encodeURIComponent : chaque octet UTF-8 en dehors d’un petit ensemble devient un échappement %XX.

{"q":"a b+c","clef":"𝄞"}

s’encode en %7B%22q%22%3A%22a%20b%2Bc%22%2C%22clef%22%3A%22%F0%9D%84%9E%22%7D, correspondant exactement à ce que URIComponent produit pour le même document, y compris le symbole musical 𝄞 sous la forme de quatre échappements %XX séparés, car il prend quatre octets en UTF-8.

L’option unique, et pourquoi elle existe

Activez “L’espace est un signe plus” et le même document encode l’espace comme + au lieu de %20, tandis que le + littéral déjà présent dans les données devient toujours %2B. Cette distinction est la seule raison pour laquelle c’est un bouton plutôt qu’une hypothèse : la requête d’une URL et l’envoi de formulaire ne sont pas d’accord sur ce que signifie un + nu. Dans le corps d’un formulaire, + signifie un espace. Dans toutes les autres parties d’une URL, + est un signe plus littéral. Deviner à tort transforme chaque plus en vos données en espace, ou laisse chaque espace encodé comme un signe plus littéral, ce qui est l’un des moyens les plus courants par lesquels un document encodé arrive corrompu de l’autre côté.

Le décodage, et pourquoi il se fait en une seule passe

Le décodage recueille chaque octet échappé en pourcents dans toute la chaîne et les décode en UTF-8 une seule fois, à la fin, plutôt qu’un échappement à la fois. Un caractère multi-octets comme un emoji arrive comme plusieurs échappements %XX séparés en séquence, donc décoder chacun individuellement et le traiter comme son propre caractère transformerait un emoji en plusieurs caractères de remplacement. Décoder une seule fois à la fin est ce qui garde le texte multi-octets intact, et cela permet également que les octets qui ne sont pas du UTF-8 valide soient signalés comme leur propre type d’échec, distinct d’un signe pour-cent sans chiffres hexadécimaux valides après, que decodeURIComponent ne peut pas distinguer de lui seul.

Voyage retour

Encoder l’exemple ci-dessus avec “L’espace est un signe plus” activé puis le décoder retourne le document exact original, "a b+c" et le symbole musical tous intacts, ce qui est le vrai test que la gestion du plus et de l’espace est cohérente dans les deux sens.

Retour aux articles