%40 reçu au lieu de @ dans une requette HTML

Bonsoir, Bonjour,

Sur un serveur web qui traite de data au travers d'un champ texte. Quand je tape "test@essai1234", je reçois "test%40essai1234".

Donc, recherche autour de l'ASCII, j'ai testé quelques conversions, elles sont basé sur du pointeur de char. Mais mon cas est un peu différent, j'y revendrais ensuite.

J'ai cherché autour de la récupération d'URL, car bien souvent le problème est aussi présent là. Mais comme je passe par du POST, je n'ai pas trouvé de solution, et toujours du pointeur de char*.

A un moment donné, j'ai testé quelques conversion sur la chaine String de retour. Sans succès.

Donc, là, faut que je trouve une solution adhéquate, simple et qui ne rentre pas dans la surcharge absolu du code.

Voyons ce que j'ai fait dans mon serveur:

String requestBody;
while(client.available()){
   requestBody += (char)client.read(); // Mise en forme de la réception
   // On peut imaginer prendre le charactère reçu, l'envoyer dans une fonction, retourner sa valeur texte dans la String. C'est la solution 1, mais comment faire ?
}

if(requestBody.length()){
   Serial.println(requestBody); // Affichage du contenu de la String, "@" est devenu "%40" !!!
   // Ici, on peut imaginer prendre le contenu de la string, la parcourir et remplacer le "%40" par sa valeur, ici l'@. Mais dans ce cas, comment le faire sans tomber sans la succession de String.replace() ?
 }

Dans mes commentaires, j'évoque 2 solutions. Je ne sais pas s'il en existe d'autres. Mais ça m'intéresserais quand même d'y travailler un peu.

Merci pour votre attention.

Il me paraît probable que tu reçoives bien le caractère '@', c'est-à-dire un octet contenant la valeur 64 (0x40 en héxadécimal)
C'est au moment où tu fait imprimer la chaîne que le formateur décide que l'octet 0x40 n'est pas affichable (pourquoi ne connaît-il pas '@' ?) et donc insère la sous-chaine "%40" à la place.

1 Like

Un peu comme l'espace traduit en %20 dans l'URL !

Pour éviter des problèmes de caractères pouvant être utiliser comme séparateur ou spécifique à une langue par les serveurs web, les clients HTTP URLEncode les chaines de caractères.

Mais alors, du coup, comment je peux savoir ce qui est retourné réellement ?
Faut-il que j'insère un URLEncode() ?

Il faut utiliser un URLDecode, je crois avoir vu passer des codes ici ou là, mais pas de librairie.
Je ne sais pas si s'autre sont mieux informés?
Sinon écrire la fonction sois même :frowning:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.