2009-11-30 7 views
0

나는 효과적인 url 파서를 찾기 위해 노력해 왔으며, php 자체에는 하위 도메인이나 확장이 포함되어 있지 않습니다. php.net에 사용자의 숫자 공헌이 만들었다 :PHP - 완전한 url 파서 도움말

불행하게도 그것과 경로에 실패

function parseUrl($url) { 
    $r = "^(?:(?P<scheme>\w+)://)?"; 
    $r .= "(?:(?P<login>\w+):(?P<pass>\w+)@)?"; 
    $r .= "(?P<host>(?:(?P<subdomain>[-\w\.]+)\.)?" . "(?P<domain>[-\w]+\.(?P<extension>\w+)))"; 
    $r .= "(?::(?P<port>\d+))?"; 
    $r .= "(?P<path>[\w/]*/(?P<file>\w+(?:\.\w+)?)?)?"; 
    $r .= "(?:\?(?P<arg>[\w=&]+))?"; 
    $r .= "(?:#(?P<anchor>\w+))?"; 
    $r = "!$r!";            // Delimiters 

    preg_match ($r, $url, $out); 

    return $out; 
} 
'-'내가 저 운동의 삶을 위해 어떻게 받아들이을 수정할 수 없습니다 '를 - '를 경로 이름에 입력하십시오. 그것은 기존의 parse_url 기능을 사용하고 '호스트'인덱스에서 하위 도메인을 구문 분석하는 것이 훨씬 쉽다

감사

답변

1

function parseUrl($url) { 
    $r = "^(?:(?P<scheme>\w+)://)?"; 
    $r .= "(?:(?P<login>\w+):(?P<pass>\w+)@)?"; 
    $r .= "(?P<host>(?:(?P<subdomain>[-\w\.]+)\.)?" . "(?P<domain>[-\w]+\.(?P<extension>\w+)))"; 
    $r .= "(?::(?P<port>\d+))?"; 
    $r .= "(?P<path>[\w/-]*/(?P<file>[\w-]+(?:\.\w+)?)?)?"; 
    $r .= "(?:\?(?P<arg>[\w=&]+))?"; 
    $r .= "(?:#(?P<anchor>\w+))?"; 
    $r = "!$r!"; 

    preg_match ($r, $url, $out); 

    return $out; 
} 

내가 경로에 대시를 추가 ...이 시도하고

+0

정확히 내가 원했던 것처럼 작동합니다 ... 실제로 질문에 대답 해 주셔서 감사합니다 :) – Mark

+0

정확하게 us.com 확장 기능과 작동하지 않습니다. – Ascherer

1

.

예 :

$url = 'http://username:[email protected]/path?arg=value#anchor'; 
$urlInfo = parse_url($url); 
$host = $urlInfo['host']; 
$subdomain = substr($host, 0, strpos($host, '.')); 
$tld = substr($host, strrpos($host, '.') + 1); 
+0

당신이 그것에 대해 갈 수있는 방법을 제안 할 수 있습니다 파일? – Mark

+0

@ 마크 - 무엇을 할 것인가? 무엇을 성취하려고합니까? –

+0

url의 하위 도메인, tld, 도메인, 경로 및 인수를 얻으려고합니다. parse_url은 하위 도메인 또는 tld를 허용하지 않습니다. – Mark