Ich bin gerade dabei ein einfaches Skript zu schreiben mit dem jede art von URL in seine Bestandteile zerlegt werden können soll. Dabei setze ich auf das Vorhandensein von bestimmten Zeichen in der URL um das tun zu können. Könnt ihr mal Kritik üben wenn eine meiner Annahmen falsch ist?
Also von vorn angefangen kommt das Protokoll wenn angegeben. Identifizierbar durch das Vorkommen von "://" in der URL. Diese Kombination wird wohl nur einmal vorkommen können. Alles davor ist Protokollname.
Ein schema ist bestehend aus [a-z]+:
// leitet bereits den Authority-Part ein, der aber ja nach schema gestaltet ist.
Du musst also expliziter werden welche schema URIs du erfassen willst.
Dann kommen mögliche Subdomains zu denen auch www gehört. Von "://" bis zum Topleveldomain sollte es keinen weiteren "/" geben. Das heißt alles dazwischen muss Domain und Subdomain sein. Von rechts angefangen auszuwerten braucht man nur die "." abgehen. Als erste kommt die TLD ("org"), dann die Domainbezeichnung ("selfhtml"), danach nur noch Subdomains.
Jetzt geht es um die Pfade. Man kann sich von "/" zu "/" hangeln und dadurch einen Pfad nach dem anderen einlesen. Sobald ein "." zwischen den "/" liegt wird es vermutlich der Dateiname mit Erweiterung sein. Obwohl ich mir nicht sicher bin dass es nicht doch sein könnte dass ein Verzeichnis einen "." enthält. Wenn man dann bei der Datei ist kann man Dateiname und Erweiterung ablesen. Sofern natürlich ein Dateiname angegeben wurde.
Kommt danach ein "?" gibt es GET-Parameter die immer getrennt sind durch "&". Und Variable und Wert sind getrennt durch "=".
Ein ? leitet den Query-String ein. Dessen interne Struktur braucht dich nicht zu interessieren.
Es kann aber auch sein dass nach dem Dateinamen noch ein "/" kommt und irgendwelche Zeichen.
Der schluss auf eine Datei in einer URI ist gewagt. Welcher Teil einer URI auf eine Ressource zutrifft, weiss nur der behandelnde Server.
Kann ich das so benutzen oder habe ich etwas als gegeben angesehen was nicht der Fall ist?
Die Frage ist eher, warum du einen URI zerlegen musst.
mfg Beat
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische