看来我已经解决了我自己的问题:
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