Archiv verlassen und diese Seite im Standarddesign anzeigen : lange URL nur auf das www.xyz.de beschränken
hi
Ich habe unterschiedliche URLs die so ungefähr aussieht http://www.xyz.de/system/index.htm
Jetzt will ich diese URL so "zusammenschneiden" das nur www.xyz.de rauskommt.
Der Zweck der ganzen Sache besteht darin das ich diese "kurze" URL an eine iptables Firewall Regel übergeben will.
Dieses muss geschechen da iptables sonst nicht klar kommt wenn ich eine "längeren" URL angebe.
Hab da imoment keine besondere Idee, da sich die URLs ja auch ständig ändern. Vielleicht habt ihr eine passende Idee.
MFG
xmarvel
P.S. Das Programm ist in der Programmiersprache C geschrieben.
Trillian
08-09-2002, 20:06
Erstmal das Protokoll Kürzel wegschnippeln, dann nur den Teil bis zum nächsten Slash raussuchen?
ungetestet
#include <iostream>
#include <string>
using namespace std;
int main()
{
int pos = 0;
string URL = "http://www.irgendwas.com/temp/example.php";
pos = URL.find("//");
if(pos != 0)
{
pos += 2;
URL.erase(0, pos);
}
pos = 0;
pos = URL.find("/");
if(pos != 0)
{
URL.erase(pos, URL.length());
cout<<URL<<endl;
}
return 0;
}
edit: code-tags an der falschen stelle ...
anda_skoa
09-09-2002, 10:52
Hmm, das ist C++.
xmarvel hat nach einer C Lösung gesucht.
Abgesehen davon bin ich mir nicht sicher, ob die if's richtig sind.
AFAIK ist 0 eine gültige Position im String
Ich glaube find() liefert -1, wenn es nichs findet.
Ciao,
_
Original geschrieben von anda_skoa
Hmm, das ist C++.
xmarvel hat nach einer C Lösung gesucht.
oha, habs überlesen .. wenn ich später noch was zeit hab mach ichs in c.
Original geschrieben von anda_skoa
Abgesehen davon bin ich mir nicht sicher, ob die if's richtig sind.
AFAIK ist 0 eine gültige Position im String
Ich glaube find() liefert -1, wenn es nichs findet.
und noch ein flüchtigkeitsfehler ;)
vollkommen richtig. man muss auf -1 prüfen ...
und die ausgabe gehört aus der zweiten if-schleife raus ..
grmbl
thx Auf die Idee mit dem abfragen wann das erste \ kommt ist mir nicht eingefallen. Der Code ist gut nur eben in C++. Aber jetzt weiss ich mind. wie der Lösungsansatz aussieht. Werd mal ein bißchen rumprobieren. Aber kannst ja wenn du Lust und Zeit hast den geänderten Code trotzdem posten.
eine zwar mögliche, aber nicht sehr elegante lösung in c :)
#include <string.h>
#include <stdio.h>
int main()
{
int i = 0,
j = 0,
iURL = 0,
dslash = -1,
slash = -1;
char URL[] = "http://www.irgendwas.com/temp/bla.html",
tmp[100];
while(URL[iURL]!='\0')
iURL++;
// schauen ob ein doppel-slash vorhanden ist
for(i; i<iURL; i++)
{
if(URL[i] == '/' && URL[i+1] == '/')
{
dslash = i;
dslash = dslash + 2;
i = iURL;
}
}
// schauen ob ein slash vorhanden ist
for(i=0; i<iURL; i++)
{
if(URL[i] == '/' && URL[i+1] != '/' && URL[i-1] != '/')
{
slash = i;
i = iURL;
}
}
// schauen ob die URL nicht bereits ok ist
if(dslash != -1 || slash != -1)
{
// schauen ob nur ein einzelner slash vorhanden ist
if(dslash == -1 && slash != -1)
{
for(i=0; i<slash; i++)
{
tmp[j] = URL[i];
j++;
}
}
else
{
// schauen ob nur ein doppel-slash vorhanden ist
if(dslash != -1 && slash == -1)
{
for(i=dslash; i<iURL; i++)
{
tmp[j] = URL[i];
j++;
}
}
else
{
// ansonsten kann nur noch beides da sein
for(int i=dslash; i<slash; i++)
{
tmp[j] = URL[i];
j++;
}
}
}
tmp[j] = '\0';
printf("%s\n", tmp);
}
else
printf("URL ist bereits im passendem Format.\n");
}
anda_skoa
09-09-2002, 15:17
Statt
while(URL[iURL]!='\0')
iURL++;
kann man kürzer
iURL = strlen(URL);
schreiben.
Außerdem ist es vielleicht besser, nicht nach // sondern nach :/ zu suchen.
Ciao,
_
THX hat alles bestens geklappt. Hier nochmal der komplette Code:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
printf ("%s\n",shortURL("http://www.xyz.de/php/index.php"));
}
shortURL(char URL[])
{
//++++++++++ Deklarationen+++++++++++++++++
int iURL,
i=0,
j=0,
dslash = -1,
slash = -1;
char tmp[100];
iURL = strlen(URL);
//++++++++++ Vor dem Doppel Slashes abschneiden++++++++++++++
for(i; i<iURL; i++)
{
if(URL[i] == '/' && URL[i+1] == '/')
{
dslash = i;
dslash = dslash + 2;
i = iURL;
}
}
//++++++++++ Und nach dem ersten einfachen Slash abschneiden+++++++++++++++
for(i=0; i<iURL; i++)
{
if(URL[i] == '/' && URL[i+1] != '/' && URL[i-1] != '/')
{
slash = i;
i = iURL;
}
}
//++++++++++ Kurze URL erstellen++++++++++++++++++++
for(i=dslash; i<slash; i++)
{
tmp[j] = URL[i];
j++;
}
//++++++++++ Variable zurückgeben+++++++++++++++++++
tmp[j] = '\0';
return tmp;
}
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.