![]() |
%20 in Leerzeichen Umwandeln
Hallo, ich möchte in kelines prog schriben mit dem ich Leerzeichen %20 umwandeln kann und anders rum wie amche cih das?
(Einen Lik umwandeln!!!)# Lg La.Reunion |
Re: %20 in Leerzeichen Umwandeln
|
Re: %20 in Leerzeichen Umwandeln
danke!
Mhh das verstehe ich nciht ganz kannst du mir ein beispiel dazu posten? |
Re: %20 in Leerzeichen Umwandeln
vll so (nicht probiert)
Delphi-Quellcode:
function URLEncode(URL: string): string;
var i:integer; URL2: string; begin URL2 := ''; for i := 0 to length(URL) - 1 do begin if URL[i] in ['a'..'z', 'A'..'Z', '.', '-', '_', '0'..'9'] {kontrolle erweitert...} then URL2 := URL2 + '%' + IntToHex(ord(URL[i]), 2) //in der Eile die umwandlung vergessen else URL2 := URL2 + URL[i]; end; //result vergessen result := URL2; end; |
Re: %20 in Leerzeichen Umwandeln
Naja, ich würde das nicht so einfach machen, weil das % Zeichen selber auch escape't werden kann. Wenn man ein % in der URL haben möchte, dann schreibt man %%, somit sollte eine URL von "%%20" falsch von dir verarbeitet werden. Auch fehlen dir dann z.B. die Punkte (%2F) etc. Geh lieber die Zeichenkette durch und bau alle Elemente mit % und einem 2-stelligem Hexadezimalwert um (es ist der ANSI Code des Zeichens angegeben) und ignorieren %% Zeichen. Dann biste auf der sicheren Seite.
|
Re: %20 in Leerzeichen Umwandeln
??! Mhhh ich hatte mir das irgendwie unkomplizierter vorgestellt :-)
|
Re: %20 in Leerzeichen Umwandeln
@muetze1:ist das auf meinen oder auf arbu mans bezogen?
meine funktioniert imho so wie bei php urlencode bzw rawurlencode |
Re: %20 in Leerzeichen Umwandeln
Hallo,
wer die Indy-Komponenten verwendet, der kann die Methoden UrlEncode() und UrlDecode() von TIdURI (V9) benutzen um die percent escapes zu erstellen oder aufzulösen. Grüße vom marabu Edit: ich hänge mal die eine Zeile Code unauffällig hier rein, damit der schwungvolle thread nicht abrupt zum Halten kommt:
Delphi-Quellcode:
Das Prozentzeichen muss übrigens %25 codiert sein - %% habe ich im Standard nicht entdecken können.
uses
IdURI; function URLDecode(uri: String): String; begin Result := TIdURI.URLDecode(uri); end; |
Re: %20 in Leerzeichen Umwandeln
Ich hatte da mal eine Funktion geschrieben. Allerdings war das ne Arbeit von 5 Minuten oder so, weil ich mal schnell eben eine brauchte. Es sind deshalb auch keine Kommentare vorhanden.
Delphi-Quellcode:
Falls irgendwas näher erklärt werden soll, einfach nachfragen. Aufgerufen wird das Ganze so:
function TranslateURL(URL: string; Encode: bool): string;
var i: integer; tmp: string; begin result := 'ERROR'; i := 1; tmp := ''; URL := LowerCase(URL); if not Encode then while i <= Length(URL) do begin if (URL[i] = '%') and (URL[i+1] in ['0'..'9', 'a'..'f']) and (URL[i+2] in ['0'..'9', 'a'..'f']) then begin tmp := tmp + chr(StrToInt('$' + Copy(URL, i+1, 2))); inc(i, 2); end else tmp := tmp + URL[i]; inc(i); end; if Encode then while i <= Length(URL) do begin if URL[i] in ['0'..'9', 'a'..'z', '.', '-', '_'] then tmp := tmp + URL[i] else tmp := tmp + '%' + IntToHex(ord(URL[i]), 2); inc(i); end; result := tmp; end;
Delphi-Quellcode:
MfG Brainstalker
Encode:
URL := TranslateURL(URL, true); Decode: URL := TranslateURL(URL, false); [Edit] , hinzugefügt :oops: [Edit2] jetzt sollte das mit Encode stimmen. |
Re: %20 in Leerzeichen Umwandeln
Zitat:
bei der kodierung nicht die großbuchstaben vergessen... (sry hab das lowercase übersehen) |
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":
![]() ![]() 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 äöü. |
Re: %20 in Leerzeichen Umwandeln
für mich auch
aber um goo%20gle zu bekommen, muss encode auf false stehen |
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: |
Re: %20 in Leerzeichen Umwandeln
meine auch ;) (aber nur in eine richtung ;))
|
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. |
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. |
Re: %20 in Leerzeichen Umwandeln
und wenn man ein % Zeichen in der URL hat, wird dieses auch wiederrum von keiner Lösung ordentlich gehandhabt.
|
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:
sind noch nen paar Extras :thumb: dabei(hab die ganze C-Datei kopiert!)
#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],"€"); html[63][7]=7; copy(html[65],"‚"); html[65][7]=7; copy(html[66],"ƒ"); html[66][7]=7; copy(html[67],"„"); html[67][7]=7; copy(html[68],"…"); html[68][7]=7; copy(html[69],"†"); html[69][7]=7; copy(html[70],"‡"); html[70][7]=7; copy(html[71],"ˆ"); html[71][7]=7; copy(html[72],"‰"); html[72][7]=7; copy(html[73],"Š"); html[73][7]=7; copy(html[74],"‹"); html[74][7]=7; copy(html[75],"Œ"); html[75][7]=7; copy(html[77],"Ž"); html[77][7]=7; copy(html[80],"‘"); html[80][7]=7; copy(html[81],"’"); html[81][7]=7; copy(html[82],"“"); html[82][7]=7; copy(html[83],"”"); html[83][7]=7; copy(html[84],"•"); html[84][7]=7; copy(html[85],"–"); html[85][7]=7; copy(html[86],"—"); html[86][7]=7; copy(html[87],"˜"); html[87][7]=7; copy(html[88],"™"); html[88][7]=7; copy(html[89],"š"); html[89][7]=7; copy(html[90],"›"); html[90][7]=7; copy(html[91],"œ"); html[91][7]=7; copy(html[93],"ž"); html[93][7]=7; copy(html[94],"Ÿ"); 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; } MfG NEW32! |
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; |
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 12:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz