2016-11-30 3 views
0

웹 페이지에서 href의 모든 값을 얻으려면 simple_html_dom.php을 사용합니다. 이 내 코드입니다 :simple_html_dom.php를 사용하여 'a'태그에서 실제 링크를 얻는 방법은 무엇입니까?

<?php 
    include_once('simple_html_dom.php'); 
    $url=$_GET['url']; //this is the target website address (for example, http://127.0.0.1/mysite/default.php?url=https://www.google.com) 

    if($url){ 
     $html = file_get_html($url); 
     foreach($html->find('a') as $e) { 
      echo $e->href . '<br>'; 
     } 
    } 
?> 

하지만 .. 문제가 출력됩니다. 다음과 같은 출력 : /about, /domains 등 또는 //en.wikipedia.org, //ro.wikipedia.org 등등.

출력을 표준 URL로 변환하는 방법 (예 : http://www.example.com/about 또는 https://www.example.com/page)? 이 같은

+0

직접 'HTML'텍스트를 구문 분석합니다. 그래서'/ page'를 쓰면'https : // www.example.com/page'을 얻을 수 없습니다. 도메인이나 프로토콜을 수동으로 추가해야합니다. 누락 된 부분을 확인하려면'parse_url' 함수를 사용하십시오 –

+0

그리고 어떻게 만들 수 있습니까? –

+0

답변을 참조하십시오. –

답변

0
/** 
* @param $href string URL To Convert 
* @param $base_url string Remote server's base url. Like wikipedia.org (without http or https) 
*/ 
function convert_url($href, $base_url = NULL){ 
    $parse = parse_url($href); 
    $host = array_key_exists('host', $parse) ? $parse['host'] : $base_url; 
    $path = array_key_exists('path', $parse) ? $parse['path'] : '/'; 
    $queryStr = array_key_exists('query', $parse) ? '?'.$parse['query'] : ''; 
    $scheme = array_key_exists('scheme', $parse) ? $parse['scheme'].'://' : 'http://'; 
    return $scheme.$host.$path.$queryStr; 
} 
0

뭔가 :

include_once('simple_html_dom.php'); 
$url = isset($_GET['url']) ? $_GET['url'] : ''; 
$parsedUrl = parse_url($url); 

if (!empty($parsedUrl['scheme']) && !empty($parsedUrl['host'])) { 
    $html = file_get_html($url); 
    foreach ($html->find('a') as $link) { 
     $l = http_build_url($link->href, [ 
      'scheme' => $parsedUrl['scheme'], 
      'host' => $parsedUrl['host'] 
     ]); 
     echo $l . '<br>'; 
    } 
} 

자세한 내용은 기능 http_build_urldocumentation를 참조하십시오.

+0

치명적인 오류가 발생했습니다. 치명적 오류 : 정의되지 않은 함수를 호출하십시오. http_build_url() –

+0

확장 프로그램'php_http.dll' (또는 Linux의 경우'php_http.so')을 활성화해야합니다. http://stackoverflow.com/questions/14056977/function-http-build-url#answer-14057205 –