看來我已經解決了我自己的問題:
function reltoabs($host, $path) {
$resulting = array();
$hostparts = parse_url($host);
$pathparts = parse_url($path);
if (array_key_exists("host", $pathparts)) return $path; // Absolute
// Relative
$opath = "";
if (array_key_exists("scheme", $hostparts)) $opath .= $hostparts["scheme"] . "://";
if (array_key_exists("user", $hostparts)) {
if (array_key_exists("pass", $hostparts)) $opath .= $hostparts["user"] . ":" . $hostparts["pass"] . "@";
else $opath .= $hostparts["user"] . "@";
} elseif (array_key_exists("pass", $hostparts)) $opath .= ":" . $hostparts["pass"] . "@";
if (array_key_exists("host", $hostparts)) $opath .= $hostparts["host"];
if (!array_key_exists("path", $pathparts) || $pathparts["path"][0] != "/") {
$dirname = explode("/", $hostparts["path"]);
$opath .= implode("/", array_slice($dirname, 0, count($dirname) - 1)) . "/" . basename($pathparts["path"]);
} else $opath .= $pathparts["path"];
if (array_key_exists("query", $pathparts)) $opath .= "?" . $pathparts["query"];
if (array_key_exists("fragment", $pathparts)) $opath .= "#" . $pathparts["fragment"];
return $opath;
}
這似乎工作得很好,爲我的目的。
如果你可以張貼所有不同形式的路徑和主機,你會得到的,或者至少有好多種,它可能會幫助做到這一點的方向。另外,你在哪裏獲得這些數據? 這可能是有用的:http://us3.php.net/manual/en/function.parse-url.php – 2010-05-20 01:47:35
理論上,這個內容將由用戶生成,並可能遍佈各地: The主機可能是:「google.com」,「http://www.google.com/prdhp?hl=en&tab=wf」(即它可能包含路徑),並需要從該字符串中提取域。 路徑的範圍可以從「example.com/donuts」到「/testing/n.html」,它需要檢測域是否在其中。 – skeggse 2010-05-20 01:50:50
我想我需要澄清我以前的評論,因爲有兩個數據給程序:主機,這是網站上的網址被檢索到,路徑,這是一個路徑,可能或可能不存在於該網站上,如果它沒有指定域名,則該域名需要從主機中提取。 – skeggse 2010-05-20 02:28:12