introduction
Comme certains d'entre vous le savent peut-être, les URL ont en fait une liste de caractères qui font des choses spéciales. Par exemple, le /
caractère sépare les parties de l'URL, et ?
, &
et les =
caractères sont utilisés pour passer des paramètres de requête au serveur. En fait, il y a un tas de personnages avec des fonctions spéciales: $&+,/:;=?@
. Lorsque vous devez utiliser ces caractères dans l'URL pour toute autre raison que les fonctions spéciales, vous devez faire quelque chose appelé encodage en pourcentage .
L'encodage en pourcentage consiste à prendre la valeur hexadécimale d'un %
caractère et à ajouter un caractère au début de celui-ci. Par exemple, le caractère ?
serait codé comme %3F
et le caractère &
serait codé comme %26
. Dans une URL en particulier, cela vous permet d'envoyer ces caractères sous forme de données via l'URL sans provoquer de problèmes d'analyse. Votre défi sera de prendre une chaîne et de coder en pourcentage tous les caractères qui doivent être codés.
Le défi
Vous devez écrire un programme ou une fonction qui accepte une seule chaîne composée de caractères avec des points de code 00-FF (caractères ASCII et ASCII étendus). Vous devrez ensuite générer ou renvoyer la même chaîne avec chaque caractère codé en pourcentage si nécessaire. Les fonctions intégrées qui accomplissent cette tâche ne sont pas autorisées, pas plus que les failles standard. Pour référence, voici une liste de chaque caractère qui doit être encodé en pourcentage:
- Caractères de contrôle (Codepoints 00-1F et 7F)
- Caractères ASCII étendus (Codepoints 80-FF)
- Caractères réservés (
$&+,/:;=?@
c'est-à-dire les points de code 24, 26, 2B, 2C, 2F, 3A, 3B, 3D, 3F, 40) - Caractères dangereux (
" <>#%{}|\^~[]`
c'est-à-dire les points de code 20, 22, 3C, 3E, 23, 25, 7B, 7D, 7C, 5C, 5E, 7E, 5B, 5D, 60)
Voici la même liste, mais à la place comme une liste de points de code décimaux:
0-31, 32, 34, 35, 36, 37, 38, 43, 44, 47, 58, 59, 60, 62, 61, 63, 64, 91, 92, 93, 94, 96, 123, 124, 125, 126, 127, 128-255
C'est le golf de code, donc le code le plus court en octets (ou la méthode de notation alternative approuvée) gagne!
Cas de test
http://codegolf.stackexchange.com/ => http%3A%2F%2Fcodegolf.stackexchange.com%2F
[@=>]{#} => %5B%40%3D%3E%5D%7B%23%7D
Test String => Test%20String
ÑÉÐÔ® => %D1%C9%D0%D4%AE
=> %0F%16%7F (Control characters 0F, 16, and 7F)
¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ => %80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF (Extended ASCII characters 80-FF)
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ => %20!%22%23%24%25%26'()*%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E
EF
ne contient pas le point d'interrogation.