begin process at 2012 05 28 15:10:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

CGI Decodage URI


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

CGI Decodage URI

dimanche 13 janvier 2008 à 22:17:52 | CGI Decodage URI

Math1004

Salut a tous .
Je debute en C++ ( je viens de m y mettre pour faire un cgi ^^ ) .
En bref , j ai un formulaire qui envoie des données je les recuperes et je les affiches . Jusque la pas de probleme .
Puis , idée "bete" : que se passe t il si je tape autre chose que "toto" pour faire mon test . Je tape donc  "yéé ca marche" .
ET LA c le drame a la place de é je me retrouve un bo %E9 et a la place des espace des + donc bon je les decodes peniblement ( meme si c été tout con enfaite mais bon j ai lutté pour pas grand chose .. ) et je fini par obtenir  en gros

 if(chaine[n]=='%' && chaine[n+1]=='E')
  {
  if(chaine[n+2]=='0')  chaine[n]='à';
  if(chaine[n+2]=='2')  chaine[n]='â';
  if(chaine[n+2]=='3')  chaine[n]='ã';
  if(chaine[n+2]=='4')  chaine[n]='ä';
  if(chaine[n+2]=='8')  chaine[n]='è';
  if(chaine[n+2]=='9')  chaine[n]='é';
  if(chaine[n+2]=='A')  chaine[n]='ê';
  if(chaine[n+2]=='B')  chaine[n]='ë';
  if(chaine[n+2]=='C')  chaine[n]='ì';
  if(chaine[n+2]=='E')  chaine[n]='î';
  if(chaine[n+2]=='F')  chaine[n]='ï';
  }


et bon y a pas  a dire c'est super chiant/rebarbatif a faire .

Pour finir ( enfin ^^ mais bon j essaye d expliqué au mieu le probleme :) pour obtenir une super aide ^^) je souhaite donc savoir si il y a un moyen ( une espece de formule mathematique/ automatique ) qui sert a faire ca tout seul :p ou une fonction de string je ne c pas j ai rien trouvé ...  ( enfin si un str:decode-uri mais je c pas dans kel langage :( :s ) ..

merci d avance pour votre aide
 
dimanche 13 janvier 2008 à 23:43:38 | Re : CGI Decodage URI

Math1004

bon ba j ai commencé a codé un script javascript pour voir ce que renvoie l encoder decoder URI et enfaite il ne s agit pas de ca mais d un codage escape/unescape javascript au vu des valeurs .
Je comprends pas pourquoi tous mes caracteres ne sont pas codé pareil ( les lettres normal de sont pas passé dans la fonction escape apriori etant donné que je recupere les lettre normales alors que les caracteres speciau sont passé dedans ..  bref je comprend pas tout de comment c fais mais bon xD ) .

Suite a cette decouverte de codage et de nouvelles recherches , j ai trouvé ca :

public:
static String^ UNEscape(
   String^ buffer
)
a la page  : http://www.web20tools.net/Products/Atom_Library/Help/Web20Tools.Atom~Web20Tools.Feed.Atom.Utility~UNEscape.html

Pourriez vous (en plus des autres questions ^^ ) m expliqué ce ke cela signifie et comment cela fonction :)
Merci d avance :) 

( ps c possible de faire des Edits ? j ai pas trouvé -_- )
lundi 14 janvier 2008 à 00:06:23 | Re : CGI Decodage URI

Neo_Fr

Membre Club
Salut, j'ai coder vite fait une petite fonction dit moi si ca marche: DWORD __stdcall Convert(BYTE* In, BYTE* Out, DWORD InSize) { const BYTE Table[] = {'à', 0x00, 'â', 'ã', 'ä', 0x00, 0x00, 0x00, 0x00, 'è', 'é', 'ê', 'ë', 'ì', 'î', 'ï' }; DWORD i = 0, j = 0, sub; while(1) { if( *((WORD*) &In[i]) == 'E%' ) { sub = (In[i+2] > 0x39) ? 0x37 : 0x30; Out[j] = Table[ (In[i+2]-sub) ]; i+=2; j++; }else Out[j++] = In[i]; if(i++ >= InSize) break; } return j; // renvoi la taille de Out } Neo_Fr
lundi 14 janvier 2008 à 00:12:38 | Re : CGI Decodage URI

Math1004

Euh , je veux bien mais j ai pas saisi comment ca marche la o_o .
moi j ai juste un string de taille quelconque qui contient un mot ou certains caractere sont passé par escape .
j ai pas BYTE* In, BYTE* Out, DWORD InSize ( je c meme pas ske c a dire vrai ... )

je debute en c++ ( a dire vrai ca ressemble presque a du c enfaite c juste pou utilisé string plutot que les char* c plus simple et il y a des ptites fonctions qui aide type string.substr et string.find ( me permet de trouvé le caractere special a echangé )
Peut tu m expliqué ta fonction pour que j essaye de l adapté ou lui donné ski fau pour qu elle fonctionne ? :) merci pour ton aide
lundi 14 janvier 2008 à 14:25:22 | Re : CGI Decodage URI

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Le lien que tu as donné (web20tools.net...), c'est du dotnet.
Le dotnet est une des principales causes de décès chez les développeurs.
A éviter donc.
(Rooooh, c'est petit ça.)

La méthode de Neo_Fr prent 3 arguments :
L'adresse de la chaîne à traduire.
L'adresse de la chaîne où la traduction sera mise en place.
La taille de la chaîne à traduire.

Tu peux convertir une string à partir d'un char * avec la méthode c_str(), et récupérer la taille avec length().
Problème : c_str ne renvoie pas forcément un pointeur sur la vrai chaîne, autrement dit, modifiée ce qui est pointé par c_str() ne modifie pas forcément la string. Donc pour le buffer, c'est rappé. Faudrait passer par un char *.

Tu peux par contre essayer de réécrire la fonction de Neo_Fr en C++.

Vala ce que ça me donne :
string __stdcall Convert(string & In)
{
string Out;

const BYTE Table[] = {'à', 0x00, 'â', 'ã', 'ä', 0x00, 0x00, 0x00,
0x00, 'è', 'é', 'ê', 'ë', 'ì', 'î', 'ï' };
DWORD i = 0, j = 0, sub;
while(1)
{
if((i < In.length() - 2) && (*((WORD*) &In[i]) == 'E%'))
{
sub = (In[i+2] > 0x39) ? 0x37 : 0x30;
Out += Table[ (In[i+2]-sub) ];
i+=2; j++;
}else Out+= In[i];
if(i++ >= In.length()) break;
}
return Out; // renvoi la taille de Out
}
J'ai rajouté un test car si (i == In.length() - 1), lorsque l'on fait le (*((WORD*) &In[i]) == 'E%'), on risque de dépasser la fin de la chaîne si elle n'a pas de zéro terminal.

Réecrite comme ça, les performances en prennent probablement un coup à cause de la classe string en général et de la concaténation en particulier.
lundi 14 janvier 2008 à 16:53:37 | Re : CGI Decodage URI

Math1004

ah je comprend mieu comment utilisé ta fonction parce que moi  je fais avec des strings pas des char * ^^
bon par contre je capte pas trop comment ca marche le truc donc bon je vous file un bout du  truc super pete cou.....  que j ai fait .. ( optimisation : 0 ^^ ) mais bon ca marche et je comprend comment ^^


string SansPlus(string& chaine)
{

      
   
 int n;
 n=0;
 
 while(chaine[n] != '\0')
 {
  if(chaine[n]=='+')
  {
   chaine[n]=' ';
   }
  
  
  if(chaine[n]=='%' && chaine[n+1]=='A')
  {
  if(chaine[n+2]=='0')  chaine[n]=' ';
  if(chaine[n+2]=='1')  chaine[n]='¡';
  if(chaine[n+2]=='2')  chaine[n]='¢';
  if(chaine[n+2]=='3')  chaine[n]='£';
  if(chaine[n+2]=='4')  chaine[n]='?';
  if(chaine[n+2]=='5')  chaine[n]='¥';
  if(chaine[n+2]=='6')  chaine[n]='|';
  if(chaine[n+2]=='7')  chaine[n]='§';
....

  chaine.erase(n+1,2);
 }

n++;
}

Voila en gros le codage ( j ai fais ca avec tous les caracteres sauf les %0X X = hexadecimal ;  qui sont assez bizzare -_- ) ;



Cette discussion est classée dans : chaine, cgi, uri, decodage, if


Répondre à ce message

Sujets en rapport avec ce message

Gestion de plusieurs ports RS232 [ par dissezfr ] Bonjour à tous d'abordJ'ai récupéré un code sur le site permettant de géré un port série, j'aimerai piloter 8 (voir +) ports série avec un seul ordina Conversion des minuscules accentuées en minuscules sans accent : impossible ? [ par ungars2 ] Bonjour, voici les messages d'erreurs de GCC pour ce code (c'est juste un exemple) : Line Location main.c:34: warning: multi-character character con problème chat [ par Adict ] salut tout le monde [^^happy17] alors j'ai commencé depuis peu à vouloir créer un "chat" simple. j'utilise donc les sockets qui marchent mais j'ai 2 récupérer les chaînes comprises entre 2 balises [ par mervat ] bonjour, je veux récupérer de mon texte toutes les chaines comprises entre et , j'espère que c'est possible et que vous pouvez m'aider à corriger ce arbre de dico [ par abdel31dz ] salut, j'essaye de faire un arbre de dico mais ça bloque et ça veut pas se compilervoila ce que j'ai fais[code]#include #include            typede verification si le mot est palindrome [ par sdiri_med ] Salut Je n'ai pas arrivé à résoudre un problème de vérification d'une chaine de caractères. Le problème consiste à vérifier si un mot est palindrome passage en paramètre d'un tableau [ par misterbobo ] Bonjour, j'ai à programmer la fonction nouvelle génération d'un jeu de la vie dont les paramètres en entrés sont imposés. Je pense être arrivé à quelq Problème compréhension du programme le compte est bon [ par echec ] Bonjour,Je cherchai un programme c++ sur internet qui permettait de calculer la solution du jeu le compte est bon, j'en est finalement trouvé un, mais ajout d'un element à la fin d'une liste chainée [ par beatkof ] bonsoir je voudrai faire une fonction qui ajout un element à la fion d'une liste chainée et je n'y arrive pas voila ma fonction: #include #include s Envoyer une simple chaine de caractères sur deux Ports Série [ par agellos ] Bonjour @ tous!Je suis à la recherche d'une librairie, code, fonction, n'importe quoi qui puisse envoyer une vulgaire chaine de caractère de 15 caract


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales