Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   %20 in Leerzeichen Umwandeln (https://www.delphipraxis.net/72095-20-leerzeichen-umwandeln.html)

Brainstalker 25. Jun 2006 16:35

Re: %20 in Leerzeichen Umwandeln
 
Nö das mit "verschlüsseln" und entschlüsseln ist schon richtig. Denn für mich ist ne Adresse die so aussieht "verschlüsselt": http://www.goo%20gle.de und diese "entschlüsselt": http://www.goo gle.de.

Auf Großbuchstaben muss auch nicht geachtet werden, da der String vorher mit LowerCase bearbeitet wird. Das einzige was dann eben noch nicht richtig unterstützt wird sind äöü.

vlees91 25. Jun 2006 16:40

Re: %20 in Leerzeichen Umwandeln
 
für mich auch

aber um goo%20gle zu bekommen, muss encode auf false stehen

Brainstalker 25. Jun 2006 16:43

Re: %20 in Leerzeichen Umwandeln
 
Ja stimmt das seh ich auch gerade. :wall:
Egal aber die Funktion funktioniert ja trotzdem, ich änder das mal schnell. :oops:

vlees91 25. Jun 2006 16:48

Re: %20 in Leerzeichen Umwandeln
 
meine auch ;) (aber nur in eine richtung ;))

stoxx 25. Jun 2006 16:50

Re: %20 in Leerzeichen Umwandeln
 
StringReplace gefällt Euch wohl nicht ?

übrigens Brainstalker, Deine Funktion ist nicht save, Du greifst auf i+1 zu und prüfst nicht, ob i+1 kleiner oder gleich der Länge vom String ist.

Brainstalker 25. Jun 2006 17:29

Re: %20 in Leerzeichen Umwandeln
 
Wie gesagt ich hab das mal in 5 Minuten gebastelt weil ich ein paar URLs hatte und keine Lust die selbst zu übersetzen. Außerdem kann der Threadersteller ja auch noch bisl Hand anlegen und die Save machen, ist ja nicht viel Arbeit. Mal sehen vielleicht änder ich die ja nochmal ab.
Naja String Replace kann man natürlich anwenden wenn man nur Leerzeichen oder so ersetzen will, aber die Funktion ist eben dafür gedacht (fast) alle Zeichen zu ersetzen. Sonderzeichen könnten noch ein Problem darstellen, aber man kanns ja noch erweitern.
Ich setz mich nachher nochmal kurz hin und werde sie vielleicht ein bisschen abändern.

Muetze1 25. Jun 2006 18:39

Re: %20 in Leerzeichen Umwandeln
 
und wenn man ein % Zeichen in der URL hat, wird dieses auch wiederrum von keiner Lösung ordentlich gehandhabt.

new32 2. Jul 2006 20:44

Re: %20 in Leerzeichen Umwandeln
 
Hi!
Ich hab auch mal ne Lösung für das Problem in 6 Minuten geschrieben(leider C)
kann aber nach veränderungen als dll kompiliert werden und auch in delphi-programmen genutzt werden.

Code:
#include<stdio.h>
#include<string.h>

int itoaY(int i, char *a, int z){
  int v=1,w=0;
  while(i/v>=1) v*=z;v/=z;
  while(v>=1) a[w]=i/v,i-=a[w]*v,a[w]+=(a[w]<=9)?'0':'A'-10,w++,v/=z;
  a[w++]='\0';
  return w;
}

int copy(char *x, char *y){
int i=0;
while(y[i]!='\0') x[i]=y[i++];
x[i+1]='\0';
return i;
}

int cmp(char *a1, char *a2, int n){
  int i;
  i=0;
  while(i<=n-1){
    if(a1[i]!=a2[i]) return i+1;
    i++;
  }
  return 0;
}

int cpy(char *a1, char *a2, int n){
  int i;
  i=0;
  while(i<=n){
    a1[i]=a2[i];
    i++;
  }
  return i;
}

int setlen(char *s, char *dest, int olen, int nlen, char null){
  olen-=nlen;
  while(nlen>=0) (dest[nlen]=(nlen+olen>=0)?s[nlen+olen]:null),nlen--;
  return 0;
}

void C(char c[192][8]){
  int i,j;
  for(i=j=0;i<256;i++,j++){
    i=(i<1)?1:(i==32)?33:(i==47)?58:(i==65)?91:(i==97)?123:i;
    c[j][0]=i;
    c[j][7]=1;
  }
  c[j][0]=' ';
  c[j][7]=1;
}

void URL(char url[192][8]){
  int i,j;
  char t[4];
  for(i=j=0;i<256;i++,j++){
    i=(i<1)?1:(i==32)?33:(i==47)?58:(i==65)?91:(i==97)?123:i;
    url[j][0]='%';
    setlen(t,&(url[j][1]),itoaY(i,t,16),3,'0');
    url[j][7]=3;
  }
  url[127][1]='C';
  url[j][0]='+';
  url[j][7]=1;
}


void HTML(char html[192][8]){
  int i,j;
  for(i=j=0;i<256;i++,j++){
    i=(i<1)?1:(i==32)?33:(i==47)?58:(i==65)?91:(i==97)?123:i;
    html[j][0]='&';
    html[j][1]='#';
    html[j][7]=itoaY(i,&(html[j][2]),10)+2;
    html[j][html[j][7]-1]=';';
  }
  copy(html[9],"
"); html[9][7]=4;
  html[12][7]=0;

  copy(html[63],"&#8364;"); html[63][7]=7;

  copy(html[65],"&#8218;"); html[65][7]=7;
  copy(html[66],"&#402;"); html[66][7]=7;
  copy(html[67],"&#8222;"); html[67][7]=7;
  copy(html[68],"&#8230;"); html[68][7]=7;
  copy(html[69],"&#8224;"); html[69][7]=7;
  copy(html[70],"&#8225;"); html[70][7]=7;
  copy(html[71],"&#710;"); html[71][7]=7;
  copy(html[72],"&#8240;"); html[72][7]=7;
  copy(html[73],"&#352;"); html[73][7]=7;
  copy(html[74],"&#8249;"); html[74][7]=7;
  copy(html[75],"&#338;"); html[75][7]=7;

  copy(html[77],"&#381;"); html[77][7]=7;

  copy(html[80],"&#8216;"); html[80][7]=7;
  copy(html[81],"&#8217;"); html[81][7]=7;
  copy(html[82],"&#8220;"); html[82][7]=7;
  copy(html[83],"&#8221;"); html[83][7]=7;
  copy(html[84],"&#8226;"); html[84][7]=7;
  copy(html[85],"&#8211;"); html[85][7]=7;
  copy(html[86],"&#8212;"); html[86][7]=7;
  copy(html[87],"&#732;"); html[87][7]=7;
  copy(html[88],"&#8482;"); html[88][7]=7;
  copy(html[89],"&#353;"); html[89][7]=7;
  copy(html[90],"&#8250;"); html[90][7]=7;
  copy(html[91],"&#339;"); html[91][7]=7;

  copy(html[93],"&#382;"); html[93][7]=7;
  copy(html[94],"&#376;"); html[94][7]=7;

  html[j][0]=' ';
  html[j][7]=1;
}

int convert(char *in, char *out, void (*fin)(char [192][8]), void (*fout)(char [192][8])){
  int i,j,k=0;
  char io[2][192][8];

  fout(io[0]);
  fin(io[1]);
  for(i=0;in[i]!='\0';i++,k++){
    for(j=0;j<=191 && j!=-1;j++) if(!cmp(&(in[i]),io[1][j],io[1][j][7])) cpy(&(out[k]),io[0][j],io[0][j][7]),i+=io[1][j][7],k+=io[0][j][7],j=-1;
    if(j!=-1) out[k]=in[i];
  }
  out[k++]='\0';
  return k;
}

int GetParamElement(char *s, char *en, char *element){
  int i=0,lp,j=0;
  lp=strlen(en);
  while(cmp(&(s[i]),en,lp) && s[i]!='\0') i++; i+=lp;
  while(s[i]!='&' && s[i]!='\0') element[j++]=s[i++];
  element[j++]='\0';
  return j;
}

int GetParamElementC(char *s, char *en, char *element){
  int i=0,lp,j=0;
  lp=strlen(en);
  while(cmp(&(s[i]),en,lp) && s[i]!='\0') i++; i+=lp;
  while(s[j+i]!='&' && s[j+i]!='\0') j++;
  s[i+j]='\0';
  lp=convert(&(s[i]),element,URL,C);
  s[i+j]='&';
  return lp;
}

int GetParamElementHTML(char *s, char *en, char *element){
  int i=0,lp,j=0;
  lp=strlen(en);
  while(cmp(&(s[i]),en,lp) && s[i]!='\0') i++; i+=lp;
  while(s[j+i]!='&' && s[j+i]!='\0') j++;
  s[i+j]='\0';
  lp=convert(&(s[i]),element,URL,HTML);
  s[i+j]='&';
  return lp;
}

void incHTML(char *x) {
  char c[256];
  FILE *f;
  long l=0;
  if(f=fopen(x,"rb")){   
    while(!feof(f)){   
      fread(c,256,1,f);
      fwrite(c,ftell(f)-l,1,stdout);
      l+=256;
    }
  }
}

int main(void){                                  //Beispiel
  char d[256]="index.exe?pp=Hello+World%21%0A123&ff=11",v[256];

  GetParamElementHTML(d,"pp=",v);
  printf("%s",v);


  return 0;
}
sind noch nen paar Extras :thumb: dabei(hab die ganze C-Datei kopiert!)

MfG NEW32!

la.reunion 20. Jul 2006 20:31

Re: %20 in Leerzeichen Umwandeln
 
ICh lass auhc mal wieder was von mir hören.

Delphi-Quellcode:
function wandlelinkum(link : string) : string;
 var
   position,zahl : integer;
   zeichen : char;
 begin
   result := link;
   while pos('%',result) <> 0 do
   begin
     position := pos('%',result) + 1;
     zahl := strtoint('$'+copy(result,position,2));
     zeichen := char(zahl);
     delete(result,position - 1,3);
     insert(zeichen,result,position - 1);
   end;
 end;

Muetze1 20. Jul 2006 20:35

Re: %20 in Leerzeichen Umwandeln
 
Grundlegend: Der Code ist gut, da er dadurch alle Codes beachtet. So meinte ich das auch. Aber eine Anmerkung dazu: Du löscht fest 2 Zeichen - aber es kann theoretisch auch nur eine Zahl nach dem % kommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz