URL zerlegen
Manuel
- perl
0 Christian Bliß0 Manuel
0 Florian Auer0 rolfrost
Hallo,
Weiss jemand, wie ich eine URL in die einzelnen bestandteile zerlegen kann?(domain.tld, verzeichnis-struktur, dateiname, dateiendung)
$url = "http://www.domain.tld/verzeichnis/ab/index.html";
...zerlegen, nur wie?
$domain = "domain.tld";
$verzeichnis = "/verzeichnis/ab/";
$dateiname = "index";
$endung = "html";
Gruß
Manuel
Hallo,
Hallo!
...zerlegen, nur wie?
Hast du es schon mit substr() versucht?
Gruß
Manuel
ja, hab auch was entsprechendes gefunden:
http://www.bbso.njit.edu/Documentations/htmldoc/tgck.htm
Das problem ist, dass hier der gesamte pfad+datei ausgelesen wird. was muss man da ergänzen um die alleinige verzeichnis-struktur zu ermitteln?
Hi,
am einfachsten geht das wohl mit Mach-es-kaputt-und-bau-es-wieder-zusammen-Spielerei.
--------------- 8< ---------------
#!/usr/bin/perl
$url = "http://abc.xyz.domain.tld/verzeichnis/nocheins/nr3/index.mit.ein.paar.punkten.html";
$url =~ s/http:////gi; # das http:// braucht niemand
@urlparts = split(///, $url); # trennen der url durch ihre /
$urlpcount = @urlparts; # bestimmen der anzahl der teile
@domain = split(/./, $urlparts[0]); # trennen des domainnamens
$domcount = @domain; # bestimmen der anzahl der domains im namen
$sldtld = $domain[$domcount-2].".".$domain[$domcount-1]; # zusammensetzen von sld und tld
for ($i=1;$i<=$urlpcount-2;$i++) { # beginnen beim ersten verzeichnis, enden beim letzten, eins hochzählen
$directory = $directory."/".$urlparts[$i]; # zusammensetzen des verzeichnisses
}
$directory = $directory."/"; # anfügen des / am schluss
@filenameparts = split(/./, $urlparts[-1]); # zerlegen des dateinamens
$filenamepcount = @filenameparts; # bestimmen der anzeil der teile des dateinamens
if ($filenamepcount > 1) { # prüfen, ob es überhaupt eine endung gibt
for ($i=0;$i<=$filenamepcount-2;$i++) { # beginnen am anfang, enden beim vorletzten teil, eins hochzählen
$filename = $filename.".".$filenameparts[$i]; # zusammensetzen des dateinamens
}
$filename = substr($filename, 1, length($filename)); # den . am anfang wegschneiden
$filetype = $filenameparts[-1]; # der dateityp ist am schluss
}
else { # das passiert, wenn es keine endung gibt
$filename = $filenameparts[0];
}
print "Content-type: text/html\n\n";
print "URL: ".$url."<br>\n";
print "Domain: ".$sldtld."<br>\n";
print "Verzeichnis: ".$directory."<br>\n";
print "Dateiname: ".$filename."<br>\n";
print "Dateityp: ".$filetype."\n";
--------------- 8< ---------------
Funktioniert mit beliebig vielen Subdomains, beliebig vielen oder überhaupt keinen Verzeichnissen und beliebig vielen Punkten im Dateinamen. Freut sich auch über Dateinamen ohne Punkte. Ist getestet und läuft so wie es da steht. Hoffe, geholfen zu haben.
Grüße,
Florian Auer
Moin,
Weiss jemand, wie ich eine URL in die einzelnen bestandteile zerlegen kann?(domain.tld, verzeichnis-struktur, dateiname, dateiendung)
input
$url = "http://www.domain.tld/verzeichnis/ab/index.html";
use File::Basename;
@suffixlist = qw(.html .htm);
#($name,$path,$suffix) = fileparse($fullname,@suffixlist)
$fullname = "http://www.domain.tld/verzeichnis/ab/index.html";
($name,$path,$suffix) = fileparse($fullname,@suffixlist);
print "Name: $name, Path: $path,Suffix: $suffix\n";
$path =~ /^http://(.*?)/(.*?)$/;
print "Domain: $1, Verzeichnis: $2\n";
=output
Name: index, Path: http://www.domain.tld/verzeichnis/ab/,Suffix: .html
Domain: www.domain.tld, Verzeichnis: verzeichnis/ab/
Prozeß erfolgreich abgeschlossen
=cut
Viele Grüße, Rolf