【问题标题】:PHP: How to get base URL from HTML pagePHP:如何从 HTML 页面获取基本 URL
【发布时间】:2011-08-05 15:22:14
【问题描述】:

我正在努力弄清楚如何做到这一点。我有一个 HTML 页面的绝对 URL,我需要为此获取基本 URL。所以 URL 可以是例如:

等等。因此,第一个问题是从这些 URL 和其他 URL 中找到基本 URL。第二个问题是一些 HTML 页面包含一个基本标签,例如 http://example.com/ 或简单的 /(尽管我认为某些浏览器只支持以 protocol:// 开头的标签?)。

无论哪种方式,我怎样才能在 PHP 中正确地做到这一点?我有 URL,并且在 DOMDocument 中加载了 HTML,因此如果存在基本标记,应该能够相当容易地获取它。例如,浏览器如何解决这个问题?


澄清我为什么需要这个

我正在尝试创建一个获取网页 URL 并将绝对 URL 返回到此网页链接到的所有图像的东西。由于某些/许多/所有这些图像可能具有相对 URL,因此我需要找到要在使它们成为绝对 URL 时使用的基本 URL。这可能是网页的基本 URL,也可能是 HTML 本身中指定的基本 URL。

我已设法获取 HTML 并找到 URL。我想我还找到了一种在我有要使用的基本 URL 时使 URL 成为绝对的工作方法。但是找到基本 URL 是我所缺少的,也是我在这里要问的。

【问题讨论】:

    标签: php url base


    【解决方案1】:

    parse_url()

    $result=parse_url('http://www.google.com');
    print_r($result);
    

    从那里挑选您正在寻找的任何元素。你可能想要$result['path']

    【讨论】:

    • 问题是路径只给出了最后一部分,这意味着我必须从所有的点点滴滴中重新构建整个 url。希望可能有类似deparse_url 之类的东西。
    • 另外,我不确定 parse_url 是否删除了“page.html”部分?那不是路径的一部分吗?
    • 我真的不明白你在问什么。能给我举个例子吗?是的,page.html 是路径的一部分。
    • 对问题进行了一些澄清。希望这能让它更清楚。如果没有,请告诉我!
    【解决方案2】:

    sn-ps 的乐趣!

    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) "/questions/2820723/"
    //      }
    

    【讨论】:

      猜你喜欢
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      相关资源
      最近更新 更多