2011-04-14 4 views
0

나는 이것을 수행하는 방법을 고민하는 데 어려움을 겪고 있습니다. HTML 페이지의 절대 URL을 가지고 있으며이 URL의 기본 URL을 가져와야합니다. 그래서 URL은 예를 들어 수 : 등등PHP : HTML 페이지에서 기본 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을 찾는 것이 내가 누락 된 부분이며 여기에서 내가 묻는 부분입니다.

답변

4

parse_url()을 참조하십시오.

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

당신이 찾고있는 요소를 골라 내십시오. 아마도 $result['path']을 원할 것입니다.

+0

문제는 그 경로 만 나는 모든 비트와 조각에서 다시 전체 URL을 구축해야한다는 것을 의미 마지막 부분을 제공합니다. 아마도 'deparse_url'같은 것이 있었으면 좋겠다. – Svish

+0

또한, parse_url이 "page.html"부분을 제거하는지 모르겠습니다. 그 길의 일부가 아닌가? – Svish

+0

나는 정말로 당신이 묻고있는 것을 이해하지 못합니다. 예를 들어 줄 수 있습니까? 예, page.html은 경로의 일부입니다. – Brad

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) "https://stackoverflow.com/questions/2820723/" 
//  } 
관련 문제