:::: MENU ::::

WebDevExp

Meine Erfahrungen in der Webentwicklerwelt

URL Handling in PHP

php

URL Handling in PHP

Ich bin vor kurzem auf einen Blog-Artikel gestoßen, den ich hier in eigenen Worten mal im Deutschen wiedergeben will. Wenn ich überlege, wie oft ich mich mit URL-Parsing herumgestritten habe, ist es mir fast schon peinlich zu schreiben, dass ich diese Funktionen bis heute nicht kannte.

parse_url

Als Rückgabe erhält man ein assoziatives Array, wenn man dieser Funktion eine URL übergibt. Man stelle sich diese URL vor:

scheme://username:password {at} host(.)tld:80/path/?a=b&c=d#fragment

Das Ergebnis, welches parse_url bei Übergabe dieses Strings ausgibt, sieht so aus:

Array
(
  [scheme] => "http"
  [host] => "host.tld"
  [user] => "username"
  [pass] => "password"
  [path] => "/path"
  [port] => 80
  [query] => "a=b&c=d"
  [fragment] => "fragment"
)

Es ist möglich einen zweiten Parameter zu übergeben, um nur einen String aus dem Array zu erhalten, möglich sind:
PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_QUERY oder PHP_URL_FRAGMENT

Wichtig:
– das ganze klappt nicht für relative URLs
– es sollte nicht zur URL-Validierung genutzt werden, da die Funktion nur splittet, ohne auf Richtigkeit zu achten
– auf URL-Teile angewandt, klappt die Funktion auch

http_build_query

Die Funktion baut aus aus einem assoziativem Array den Teil einer URL, der hinterm ? steht. Beispiel:

$data = array("a" => "b", "c" => "d");
echo http_build_query($data);
Output: a=b&c=d

Die aktuelle URL auslesen

Hierfür gibt es anscheinen keinen wirklich schönen, fertigen Weg, deshalb hier eine Funktion, die ich wohl ohne Kommentar so stehen lassen kann, welche diese Aufgabe erledigt:

function current_url() {
    $isHTTPS = ( isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on" );
    $isPort = ( isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80")
                 || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443")));
    $port = ( $isPort ) ? ( ':'.$_SERVER["SERVER_PORT"] ) : '';
    $url = ( $isHTTPS ? 'https://' : 'http://').$_SERVER["SERVER_NAME"].$port.$_SERVER["REQUEST_URI"];

    return $url;
}

Gibts noch mehr URL Funktionen, die ihr für sinnvoll haltet?

Leave a comment

Loading Facebook Comments ...