Manuel: URL zerlegen

Hallo,

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";

...zerlegen, nur wie?

output

$domain = "domain.tld";
$verzeichnis = "/verzeichnis/ab/";
$dateiname = "index";
$endung = "html";

Gruß
Manuel

  1. Hallo,

    Hallo!

    ...zerlegen, nur wie?

    Hast du es schon mit substr() versucht?

    Gruß
    Manuel

    1. 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?

  2. 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];
    }

    ausgabe

    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

  3. 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 weiter zerlegen...

    $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

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?