PHP:如何从HTML页面获取基本URL
问题描述:
我正在努力弄清楚如何做到这一点。我有一个绝对的URL到一个HTML页面,我需要得到这个基地址。所以,网址,可能会是例如:PHP:如何从HTML页面获取基本URL
- http://www.example.com/
- https://www.example.com/foo/
- http://www.example.com/foo/bar.html
- https://[email protected]/foo
等。所以,第一个问题是从这些URL和其他URL中找到基本URL。第二个问题是一些HTML页面包含一个基本标记,例如http://example.com/
或简单地/
(尽管我认为某些浏览器只支持以protocol://
开头的浏览器)。
无论哪种方式,我怎么可以在PHP中正确地做到这一点?我有网址,并且我已经将HTML加载到了一个DOMDocument中,所以如果它存在的话,应该能够很容易地获取基本标记。浏览器如何解决这个问题?
为什么我需要这个
我试图创造一些东西,需要一个URL的网页,并返回绝对URL到所有图像此网页链接到澄清。由于这些图片中的某些/很多/所有图片可能都有相对的网址,因此我需要在我将它们设为绝对网址时查找使用的基准网址。这可能是网页的基本URL,也可能是HTML本身指定的基本URL。
我设法抓取HTML并找到网址。我想我还找到了一种使我可以使用基URL的绝对URL的工作方法。但是找到基本的URL就是我想要的,我在这里问的是什么。
答
请参阅parse_url()
。
$result=parse_url('http://www.google.com');
print_r($result);
从那里找出你正在寻找的任何元素。你可能想要$result['path']
。
答
有趣的片段!
if (!function_exists('base_url')) {
function base_url($atRoot=FALSE, $atCore=FALSE, $parse=FALSE){
if (isset($_SERVER['HTTP_HOST'])) {
$http = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http';
$hostname = $_SERVER['HTTP_HOST'];
$dir = str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);
$core = preg_split('@/@', str_replace($_SERVER['DOCUMENT_ROOT'], '', realpath(dirname(__FILE__))), NULL, PREG_SPLIT_NO_EMPTY);
$core = $core[0];
$tmplt = $atRoot ? ($atCore ? "%s://%s/%s/" : "%s://%s/") : ($atCore ? "%s://%s/%s/" : "%s://%s%s");
$end = $atRoot ? ($atCore ? $core : $hostname) : ($atCore ? $core : $dir);
$base_url = sprintf($tmplt, $http, $hostname, $end);
}
else $base_url = 'http://localhost/';
if ($parse) {
$base_url = parse_url($base_url);
if (isset($base_url['path'])) if ($base_url['path'] == '/') $base_url['path'] = '';
}
return $base_url;
}
}
使用简单:
// url like: http://stackoverflow.com/questions/2820723/how-to-get-base-url-with-php
echo base_url(); // will produce something like: http://stackoverflow.com/questions/2820723/
echo base_url(TRUE); // will produce something like: http://stackoverflow.com/
echo base_url(TRUE, TRUE); || echo base_url(NULL, TRUE); // will produce something like: http://stackoverflow.com/questions/
// and finally
echo base_url(NULL, NULL, TRUE);
// will produce something like:
// array(3) {
// ["scheme"]=>
// string(4) "http"
// ["host"]=>
// string(12) "stackoverflow.com"
// ["path"]=>
// string(35) "https://stackoverflow.com/questions/2820723/"
// }
问题是,路径只给出了最后一部分,这意味着我必须从所有的点点滴滴再次建立整个URL。希望有可能像'deparse_url'什么的。 – Svish 2011-04-15 06:21:02
另外,我不确定parse_url是否会删除“page.html”部分?这不是路径的一部分吗? – Svish 2011-04-15 06:28:03
我真的不明白你在问什么。你能给个例子吗?是的,page.html是路径的一部分。 – Brad 2011-04-15 12:14:19