Hoppa direkt till innehåll

Modellera URL:ar

2 juni 2013 -
Jag byggde två funktioner för att plocka isär och skapa URL:ar för en stund sedan. Det var så ofta jag satt och försökte skapa eller tolka dem manuellt så livet blev bra mycket enklare med dessa två funktioner.
function extract_url($string = false){
    if ($string === false) $string = $GLOBALS["protocol"] . "://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
    $url = parse_url($string);
    if (!empty($url["query"])){
      $url["querystring"] = $url["query"];
      parse_str(html_entity_decode($url["query"]), $url["query"]);
    }
    if (!empty($url["path"])){
      $url["path"] = preg_replace("!/+!", "/", $url["path"]);
    }

    return $url;
  }
function create_url($a, $onlypath = false, $encode = false){
    $url = false;
    if (!is_array($a))
      $url = $a;
    if (!empty($a["query"])){
      if (is_array($a["query"])){
        $a["query"] = array_map(function ($r){
          if (!empty($r))
            return $r;
        }, $a["query"]);
        $a["query"] = http_build_query($a["query"]);
      } else {
        parse_str($a["query"], $query);
        $a["query"] = http_build_query($query);
      }
    }

    if (empty($a["host"]) && !$onlypath){
      $a["host"] = $_SERVER["HTTP_HOST"];
    }
    if (empty($a["scheme"]) && !$onlypath){
      $a["scheme"] = (!empty($_SERVER['HTTPS'])) ? 'https' : 'http';
    }
    if (empty($a["path"]) && !empty($a["host"]) && $a["host"] == $_SERVER["HTTP_HOST"]){
      $a["path"] = $_SERVER["PHP_SELF"];
    }

    #if (!empty($encodeamp)) $a["query"] = preg_replace("/&/", "&", $return);
    
    $return = http_build_url($url, $a);
    $return = preg_replace("/\?$/", "", $return);
    if (!empty($onlypath))
      #$return = preg_replace("/^[a-z]{3,5}\:\/\/[a-z,\.,-]+/", "", $return);
      $return = preg_replace("/^http.*:\/\/.*?\//", "/", $return);

    return $return;
  }
Och det är lika enkelt som det ser ut. Det ger snabbåtkomst till ett par av PHP's inbyggda funktioner för att tolka URl:ar och normaliserar det. Enkelt och smidigt.

extract_url()

print_r(extract_url("http://sandman.net/index.php?mode=list"));
Array ( [scheme] => http [host] => sandman.net [path] => /index.php [query] => Array ( [mode] => list ) [querystring] => mode=list )

create_url()

$url = extract_url("http://sandman.net/index.php?mode=list");
$url["query"]["mode"] = "show";
print create_url($url);
http://sandman.net/index.php?mode=show
Mer i Tutorials
CSS filters for background images
PHP och BankID
Skapa sn i Photoshop
Modellera URLar
PHP Formatera telefonnummer
Skapa ett Netflixprogram
Expandera korta URLar
Hemma Bäst
Utebar: Pergola
Hemma Bäst
Utebar: Kylskåp och barstolar
Hemma Bäst
Utebar: Skåpdörrar
Arkad- och flipperkabinett
Robotar
Nordic: The Musical
Blodsbröder
Nordic: The Musical
Midgård
Nordic: The Musical
Himlen brinner
Nordic: The Musical
Gudarnas spel
Nordic: The Musical
Oändlig kärlek
Ljussabel-projektet
Hemma Bäst
Skåp till Ute-TV
Thåström i Globen
Bröllopspresent
Födelsedagspresent
Borta Bra
Recension: Jacy's
Thåström
Nordic: The Musical
Kunskapens pris
Nordic: The Musical
Livets träd
Nordic: The Musical
Allting börjar alltid någonstans
Borta Bra
Recension: Bohusgården Hotell & Konferens
Borta Bra
Recension: Elite Palace
Nytt projekt på gång: Ljussablar som ljuskälla
Hemma Bäst
Hemmaspa: Hemma-Spa klart!
Alien: Romulus
Hemma Bäst
Utebar: Utebaren klar!
Hemma Bäst
Utebar: Börjar likna en bar!
Hemma Bäst
Utebar: Reglar på plats
Hemma Bäst
Utebar: Rivning pågår!
Mjölner!
Borta Bra
Örnen börjar bli redo för Sweden Rock
Hemma Bäst
Utebar: Utebar!
Mixtejp
Norrsken
Kan ha "råkat" skaffa något på Sci-Fi-mässan
Borta Bra
Recension: Steam Hotell
Hemma Bäst
Hemmaspa: Det börjar ta form med hemma-spa:et
Rostfärg och IKEA-lampa
Myst Book
Create a physical book from my digital book
Myst Book
Survey Island
Myst Book
Someone is trying to sell my map!
Julkalender
Myst Book
Myst book updated
Borta Bra
Recension: Yasuragi Ryokan Hanare
Borta Bra
Recension: Ad Astra
Ny tatuering - midgårdsormen!
Minnestal till en kaffekopp
Förlovade
Borta Bra
Sweden Rock 2023
Ny nummerskylt för huset