PHP: Как получить базовый URL со страницы HTML - PullRequest
0 голосов
/ 14 апреля 2011

Я пытаюсь понять, как это сделать.У меня есть абсолютный URL на страницу HTML, и мне нужно получить базовый URL для этого.Таким образом, URL-адреса могут быть, например:

И так далее.Итак, первая проблема - найти базовый URL из этих и других URL.Вторая проблема заключается в том, что некоторые HTML-страницы содержат базовый тег, который может быть, например, http://example.com/ или просто / (хотя я думаю, что некоторые браузеры поддерживают только тот, который начинается с protocol://?).

В любом случае, как я могу сделать это в PHP правильно?У меня есть URL, и у меня есть HTML, загруженный в DOMDocument, поэтому я должен иметь возможность довольно легко захватить базовый тег, если он существует.Как браузеры решают это, например?


Разъяснение того, зачем мне это нужно

Я пытаюсь создать что-то, что берет URL-адрес веб-страницы и возвращает абсолютный URL-адрес всемизображения, на которые ссылается эта веб-страница.Поскольку некоторые / многие / все эти изображения могут иметь относительные URL-адреса, мне нужно найти базовый URL-адрес для использования, когда я делаю их абсолютными.Это может быть базовый URL-адрес веб-страницы или базовый URL, указанный в самом HTML.

Мне удалось получить HTML-код и найти URL-адреса.Я думаю, что я также нашел рабочий способ сделать URL-адреса абсолютными, когда у меня есть базовый URL-адрес.Но поиск базового URL - это то, чего мне не хватает, и о чем я спрашиваю здесь.

Ответы [ 2 ]

4 голосов
/ 14 апреля 2011

См. parse_url().

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

Выберите там, какой элемент вы ищете. Вы, вероятно, хотите $result['path'].

0 голосов
/ 21 ноября 2013

Веселье с отрывками!

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: /1592384/kak-poluchit-bazovyi-url-s-pomoschy-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/"
//      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...