PHP:如何从HTML页面获取基本URL

问题描述:

我正在努力弄清楚如何做到这一点。我有一个绝对的URL到一个HTML页面,我需要得到这个基地址。所以,网址,可能会是例如:PHP:如何从HTML页面获取基本URL

等。所以,第一个问题是从这些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']

+0

问题是,路径只给出了最后一部分,这意味着我必须从所有的点点滴滴再次建立整个URL。希望有可能像'deparse_url'什么的。 – Svish 2011-04-15 06:21:02

+0

另外,我不确定parse_url是否会删除“page.html”部分?这不是路径的一部分吗? – Svish 2011-04-15 06:28:03

+0

我真的不明白你在问什么。你能给个例子吗?是的,page.html是路径的一部分。 – Brad 2011-04-15 12:14:19

有趣的片段!

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://*.com/questions/2820723/how-to-get-base-url-with-php 

echo base_url(); // will produce something like: http://*.com/questions/2820723/ 
echo base_url(TRUE); // will produce something like: http://*.com/ 
echo base_url(TRUE, TRUE); || echo base_url(NULL, TRUE); // will produce something like: http://*.com/questions/ 
// and finally 
echo base_url(NULL, NULL, TRUE); 
// will produce something like: 
//  array(3) { 
//   ["scheme"]=> 
//   string(4) "http" 
//   ["host"]=> 
//   string(12) "*.com" 
//   ["path"]=> 
//   string(35) "https://*.com/questions/2820723/" 
//  }