我正在努力弄清楚如何做到这一点。我有一个HTML页面的绝对URL,我需要获取此基本URL。所以URL可以是例如:
等等。所以,第一个问题是从那些URL和其他URL中找到基本URL。第二个问题是某些HTML页面包含一个基本标记,例如http://example.com/
或简称/
(虽然我认为某些浏览器只支持以protocol://
开头的那个?)。
无论哪种方式,我怎样才能在PHP中正确执行此操作?我有URL并且我在DOMDocument中加载了HTML,因此如果它存在,应该能够相当容易地获取基本标记。例如,浏览器如何解决这个问题?
澄清我为什么需要这个
我正在尝试创建一些将URL带到网页的内容,并将绝对URL返回到此网页链接到的所有图像。由于这些图像中的一些/多个/所有图像可能具有相对URL,因此我需要找到在我将它们设为绝对时使用的基本URL。这可能是网页的基本URL,也可能是HTML本身指定的基本URL。
我设法获取HTML并找到了网址。我想我已经找到了一种在我使用基本URL时使URL绝对的工作方法。但找到基本网址是我所缺少的,以及我在这里要问的内容。
答案 0 :(得分:4)
请参阅parse_url()
。
$result=parse_url('http://www.google.com');
print_r($result);
选择你想要的任何元素。您可能需要$result['path']
。
答案 1 :(得分:0)
有趣的片段!
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/"
// }