2013-10-25 3 views
2

프로토콜, 디렉토리, 하위 도메인 또는 하위 도메인이있을 수도 있고 없을 수도있는 사용자 입력 URL 문자열에서 도메인 이름과 TLD (하위 도메인 없음) 등 즉프로토콜을 포함하지 않을 수도있는 문자열에 대해 parse_url()을 실행하십시오.

파일 이름은 다음 중 하나를 주어진 : example.com :

example.com 
www.example.com 
sub.example.com 
example.com/whatever/hey.html 
http://example.com 
https://subdomain.example.com 
ftp://example.com/whatever/hey.html 

나는 항상 함께 끝나야합니다. URL이 프로토콜없이 제공되는 경우

$hostParts = explode('.', parse_url($URL, PHP_URL_HOST)); 
$tld = array_pop($hostParts); 
$domain = array_pop($hostParts); 
$domain = $domain . "." . $tld; 

그러나, 그것은 나누기 :

는 지금이 내가 뭐하는 거지입니다. 이 상황에서 parse_url이 호스트를 얻지 못하는 이유는 무엇입니까?

답변

2

URL은 프로토콜 또는 체계를 정의합니다. //가 있는지 확인하고,없는 경우 문자열 앞에 추가합니다. 이것은 PHP < 5.4.7에서 다를 수 있으므로 프로토콜이없는 경우 http : //를 추가하십시오.

+1

나는 당신이 옳다는 것을 알 수 있습니다. 다음과 같이 코드를 사용했습니다 : 'if (strpos ($ URL, ": //") === false && substr ($ URL, 0,1)! = "/") { $ URL = " http : // ". $ URL; }' 코드의 첫 번째 줄 앞에 넣으면됩니다. – brentonstrine

+0

아마도 조금 더 간단 할 것이다.'$ url = (strpos ($ urlString, "//") === false)? "// $ urlString": $ urlString; –