Hoppa direkt till innehåll

Modellera URL:ar

2013-06-18 -
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
Mixtejp
Norrsken
Kan ha "råkat" skaffa något på Sci-Fi-mässan
Recension: Steam Hotell
Rostfärg och IKEA-lampa
Create a physical book from my digital book
Survey Island
Someone is trying to sell my map!
Julkalender
Myst book updated
Recension: Yasuragi Ryokan Hanare
Recension: Ad Astra
Ny tatuering - midgårdsormen!
Minnestal till en kaffekopp
Förlovade
Sweden Rock 2023
Ny nummerskylt för huset
Fix i husbilen
Grubbelgubbe
Måla med rostfärg
Vårfix i trädgården
Jung Kook
Pappaskämt och annan humor
Bilder på spelbordet när det används
Använda laserskäraren för att skapa innehål...
Julklappar med laserskärare
Budget-Spa
Nyckelskåp
Fjällkaffe
1/20 DeLorean Time Machine
Caso Outdoor Cooler
Minikyl Coca Cola
Verktygsvagn med verktyg, 161 delar
CSS filters for background images
Huset ommålat!
Skiss för tatuering
Spelbordet klart
Laser cutting my Myst Island
We Can Do It
Batwing
Elsa
Skaffat husbil
Foton på bilen
Remarkable 2
Ny espressomaskin!
Porträtt av Emma
AtlasCMS och rådande krissituation
Ny bil! Ford Mustang Mach-E GT
Spelbordet, igen
Ny bil beställd