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);
$url["querystring"] = $url["query"];
parse_str(html_entity_decode($url["query"]), $url["query"]);
$url["path"] = preg_replace("!/+!", "/", $url["path"]);
return $url;
}
?>
<?
function create_url($a, $onlypath = false, $encode = false){
if (!is_array($a))
$url = $a;
if (is_array($a["query"])){
$a["query"] = array_map(function ($r){
if ($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 (!$a["host"] && !$onlypath){
$a["host"] = $_SERVER["HTTP_HOST"];
}
if (!$a["scheme"] && !$onlypath){
$a["scheme"] = (!empty($_SERVER['HTTPS'])) ? 'https' : 'http';
}
if (!$a["path"] && $a["host"] == $_SERVER["HTTP_HOST"]){
$a["path"] = $_SERVER["PHP_SELF"];
}
#if ($encodeamp) $a["query"] = preg_replace("/&/", "&", $return);
$return = http_build_url($url, $a);
$return = preg_replace("/?$/", "", $return);
if ($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