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