Entwickler-Ecke

Internet / Netzwerk - Absolute von Relativen Web-Pfaden unterscheiden


F34r0fTh3D4rk - Di 17.07.07 10:02
Titel: Absolute von Relativen Web-Pfaden unterscheiden
hi, ich suche eine möglichkeit Links nach relativ oder absolut zu kategorisieren, bzw zu unterscheiden um was es sich handelt.

Relative Pfade:

bla.jpg
/images/bla.jpg

Absolute Pfade:

EINE_-_SEITE.de/bla.jpg
EINE_-_SEITE.de/images/bla.jpg
http://www.EINE_-_SEITE.de/bla.jpg
http://www.EINE_-_SEITE.de/images/bla.jpg
http://EINE_-_SEITE.de/bla.jpg
http://EINE_-_SEITE.de/images/bla.jpg
http://www.EINE_-_SEITE.de/bla.jpg
http://www.EINE_-_SEITE.de/images/bla.jpg

etc.

Ich weiß nicht ob es noch mehr Möglichkeiten gibt, auf jedenfall suche ich eine möglichst saubere Lösung solche Pfade zu unterscheiden.

Danke,

mfg


ene - Di 17.07.07 10:10

Moin,

./images/bild.png gibt es zB auch noch. Einzige Lösung, die mir auf die Schnelle einfällt ist die Suche nach der Domain.

Also wenn .de/.com etc im Namen vorhanden, dann sollte es sich um absolute Pfade handeln.


F34r0fTh3D4rk - Di 17.07.07 10:15

aber es gibt net nur .de und .com ;) und wer sagt mir, dass es nicht eine datei mit der endung .com gibt ;)

würde es sowas wie unterordner nicht geben könnte prüfen ob extractfilename(string) = string. dann wäre es ein relativer pfad.
wobei extractfilename gerade bei webpfaden nicht zuverlässig ist (gerade wegen .com etc. (wenns am ende steht)) gibt es dazu vielleicht auch eine alternative ? Ich sehe da auf Anhieb keine Lösung ;)

Ich könnte allerdings den Link an die url der seite anhängen auf der er steht und die dateigröße prüfen. ist diese 0, so existiert die datei nicht. allerdings sagt das 1. wenig über den pfad aus und 2. lässt sich die dateigröße nicht immer abfragen :(


mfg


ene - Di 17.07.07 10:31

Sorry, aber den Post verstehe ich gerade nicht.

Eine andere auch unzuverlässige Methode ist die Suche nach Punkten. Wenn nur 1 Punkt da ist, ist er relativ, sind mehrere da, musst du schauen, ob die Punkte ganz am Anfang stehen. Ich weiß grad nicht, ob auch so etwas geht .images/bild.jpg. Aber alle Domains brauchen den Punkt davor und ob das nun .de oder .de.vu ist, ist egal, denn es wäre nicht nur Punkte.


Narses - Di 17.07.07 10:36

Moin!

Ich würde sagen, das geht: :idea:

Slash im URL? Punkt vor dem ersten Slash? absolut : relativ : relativ

;)

cu
Narses


F34r0fTh3D4rk - Di 17.07.07 10:36

ich könnte auch einfach beides herunterladen lassen, was nicht geht geht nicht, ich denke mal dass idhttp keinen fehler ausspuckt wenn die datei existiert, das problem ist extractfilepath, da muss ich mir wohl was eigenes schreiben.

@Narses: was ist mit ./images/bla.jpg ? müsste ich dann prüfen wo der punkt ist.

so in etwa ?

Delphi-Quelltext
1:
2:
3:
4:
function IsAbsolute(path: string): boolean;
begin
  result := (pos('.', path) < pos('/', path)) and (pos('.', path) > 1);
end;


funzt leider net ;)

mfg


Narses - Di 17.07.07 10:41

Moin!

user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
was ist mit ./images/bla.jpg ? müsste ich dann prüfen wo der punkt ist.

OK, für absolut müßte auch noch ein nicht-Punkt-Zeichen vor dem Punkt sein. ;)

cu
Narses


noidic - Di 17.07.07 10:54

Mir würd da folgendes einfallen:

DNS-Anfrage auf den String bis zum ersten /

Es gibt zwar auch Unterordner, die wie gültige Domains heissen, aber geneuer wirds wohl nicht gehen.


F34r0fTh3D4rk - Di 17.07.07 12:05

hier ist der erste versuch für ein extractfilename für webdateien:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function ExtractWebFileName(path: string): string;
var
  i: integer;
  tmpstr: string;
begin
  result := '';
  if copy(path, 17) = 'http://' then
    path := copy(path, 8, length(path) - 7);
  for i := length(path) downto 1 do
    if (path[i] = '/'then
    begin
      tmpstr := copy(path, i + 1, length(path) - i);
      if pos('.', tmpstr) > 0 then
        result := tmpstr;
      break;
    end;
end;


die isabsolute funktion hab ich noch ein wenig angepasst:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
function IsAbsolute(path: string): boolean;
begin
  if copy(path, 17) = 'http://' then
    path := copy(path, 8, length(path) - 7);
  result := (pos('.', path) < pos('/', path)) and (pos('.', path) > 1);
end;


Mit den beiden Funktionen scheint das schonmal zu klappen, aber vielleicht gibt es noch was besseres ;) oder gibt es noch lücken ?

(extractfileext akzeptiert /\ etc in endungen, dabei sind die nichtmal in dateinamen erlaubt, interessant ;) )

mfg


Lannes - Di 17.07.07 14:28

Hallo,

durch die Festlegung auf 'http://' schließt Du andere Protokolle aus, z.B https://, ftp://...
Stell doch die Funktionen auf '://' um, das müsste reichen.

Außerdem ist doch, wenn '://' enthalten, imho die Bedingung für einen absoluten Pfad gegeben.


F34r0fTh3D4rk - Di 17.07.07 14:30

aber :// muss net zwingend vorkommen ;)
btw: die isabsolute tuts doch noch net :(
mfg


Regan - Di 17.07.07 14:31

Zustimmung. Aber was machst du bei Adressen die die Form username@webbetreiber;passwort (oder so ähmlich) haben?

Edit: wikipedia:
http://de.wikipedia.org/wiki/Uniform_Resource_Locator

http://http://hans.geheim@www.example.org:80/demo/example.cgi?land=de&stadt=aa#abschnitt1
Protokoll Benutzer Passwort Domain Port Pfad Query Anker

Edit: Man kann kein Protokoll im DF anzeigen!?


F34r0fTh3D4rk - Di 17.07.07 14:39

genau, was mache ich dann ? ich bin doch net der erste der sich damit rumschlagen muss oder ?


mfg


Regan - Di 17.07.07 14:48

vielleicht kannst du ja erstmal den anker entfernen. dann würde ich die get-parameter (bla.php?id=1) entfernen. Als nächstes den Dateinamen . Dann würd ich auf den unterordner überprüfen. Vllt. kannst du das ja fortsetzten.


Lannes - Di 17.07.07 14:58

Hallo,
user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
aber :// muss net zwingend vorkommen ;)

aber wenn es vorkommt dann ist es absolut, ich würde da mit einem else-Zweig arbeiten.


F34r0fTh3D4rk - Di 17.07.07 15:04

user profile iconRegan hat folgendes geschrieben:
vielleicht kannst du ja erstmal den anker entfernen. dann würde ich die get-parameter (bla.php?id=1) entfernen. Als nächstes den Dateinamen . Dann würd ich auf den unterordner überprüfen. Vllt. kannst du das ja fortsetzten.

was meinst du mit anker ? und warum den dateinamen ? das mit den get parametern muss ich ohnehin.

mfg


Regan - Di 17.07.07 15:07

der anker stört denke ich. und den dateinamen brauchst du auch nicht, um zu überprüfen, um welchen web-pfad es sich handelt.


F34r0fTh3D4rk - Di 17.07.07 15:17

naja wenn der pfad bla.jpg ist und ich den dateinamen wegmache (den ich ja auch erstmal als solchen identifizieren muss), ist nicht mehr viel über ;)


mfg


Regan - Di 17.07.07 15:24

dann weißt du aber immerhin, dass es sich um einen relativen pfad handelt. :P


F34r0fTh3D4rk - Di 17.07.07 15:28

ich hab ja einige ansätze, aber das will auch erstmal umgesetzt werden und solange das nichts halbes und nicht ganzes ist... ;) mein bisheriger code funzt ja nicht einmal ;)

mfg


GTA-Place - Di 17.07.07 16:13

Die hier markierten Pfade sind keine absoluten Pfade:
user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
Absolute Pfade:

[highlight]EINE_-_SEITE.de/bla.jpg
EINE_-_SEITE.de/images/bla.jpg
www.EINE_-_SEITE.de/bla.jpg
www.EINE_-_SEITE.de/images/bla.jpg[/highlight]
http://EINE_-_SEITE.de/bla.jpg
http://EINE_-_SEITE.de/images/bla.jpg
http://www.EINE_-_SEITE.de/bla.jpg
http://www.EINE_-_SEITE.de/images/bla.jpg

Der Server setzt ein Protokoll:// vorraus. Ist ihm das Protokoll unbekannt, setzt er noch ein file:// davor. Wenn es dir nur um HTTP-Links geht, reicht ein Prüfung, ob http:// vorhanden ist ;-).


F34r0fTh3D4rk - Di 17.07.07 16:29

öhhhhhhm ja ;)
danke, damit haben sich gerade alle probleme verflüchtigt ;)