URLs parse_url

(PHP 4, PHP 5, PHP 7, PHP 8)

parse_url — URL을 구문 분석하고 해당 구성 요소를 반환합니다.


설명

parse_url(string $url, int $component = -1): int|string|array|null|false

이 함수는 URL을 구문 분석하고 존재하는 URL의 다양한 구성 요소를 포함하는 연관 배열을 반환합니다. 배열 요소의 값은 URL 디코딩되지 않습니다.

이 함수는 주어진 URL의 유효성을 검사하기 위한 것이 아니라 아래 나열된 부분으로만 분할합니다. 부분 및 유효하지 않은 URL도 허용되며 parse_url()은 이를 올바르게 구문 분석하기 위해 최선을 다합니다.


매개변수

url
구문 분석할 URL입니다.
component
PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_QUERY 또는 PHP_URL_FRAGMENT 중 하나를 지정하여 특정 URL 구성 요소만 문자열로 검색합니다(PHP_URL_PORT가 지정된 경우 제외, 반환 값이 int인 경우 제외).

반환 값

심각한 형식의 URL에서 parse_url()false를 반환할 수 있습니다.

component 매개변수가 생략되면 연관 배열이 리턴됩니다. 적어도 하나의 요소가 배열 내에 존재합니다. 이 배열의 잠재적 키는 다음과 같습니다.

  • scheme - e.g. http
  • host
  • port
  • user
  • pass
  • path
  • query - after the question mark ?
  • fragment - after the hashmark #

component 매개변수가 지정되면 parse_url()은 배열 대신 문자열(또는 PHP_URL_PORT의 경우 int)을 반환합니다. 요청된 구성 요소가 지정된 URL 내에 존재하지 않으면 null이 반환됩니다. PHP 8.0.0부터 parse_url()은 부재 및 빈 쿼리와 조각을 구별합니다.

http://example.com/foo → query = null, fragment = null
http://example.com/foo? → query = "",   fragment = null
http://example.com/foo# → query = null, fragment = ""
http://example.com/foo?# → query = "",   fragment = ""
                

이전에는 모든 경우에 쿼리 및 조각이 null이 되었습니다.

구성 요소의 제어 문자(cf. ctype_cntrl())는 밑줄(_)로 대체됩니다.


변경 로그

버전 설명
8.0.0 parse_url()은 이제 부재 및 빈 쿼리 및 조각을 구별합니다.

Examples

예제 #1 parse_url() 예제

                  
<?php
$url = 'http://username:password@hostname:9090/path?arg=value#anchor';

var_dump(parse_url($url));
var_dump(parse_url($url, PHP_URL_SCHEME));
var_dump(parse_url($url, PHP_URL_USER));
var_dump(parse_url($url, PHP_URL_PASS));
var_dump(parse_url($url, PHP_URL_HOST));
var_dump(parse_url($url, PHP_URL_PORT));
var_dump(parse_url($url, PHP_URL_PATH));
var_dump(parse_url($url, PHP_URL_QUERY));
var_dump(parse_url($url, PHP_URL_FRAGMENT));
?>
                  
                

위의 예는 다음을 출력합니다.

array(8) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(8) "hostname"
  ["port"]=>
  int(9090)
  ["user"]=>
  string(8) "username"
  ["pass"]=>
  string(8) "password"
  ["path"]=>
  string(5) "/path"
  ["query"]=>
  string(9) "arg=value"
  ["fragment"]=>
  string(6) "anchor"
}
string(4) "http"
string(8) "username"
string(8) "password"
string(8) "hostname"
int(9090)
string(5) "/path"
string(9) "arg=value"
string(6) "anchor"
                

예제 #2 스키마가 누락된 parse_url() 예제

                  
<?php
$url = '//www.example.com/path?googleguy=googley';

// Prior to 5.4.7 this would show the path as "//www.example.com/path"
var_dump(parse_url($url));
?>
                  
                

위의 예는 다음을 출력합니다.

array(3) {
  ["host"]=>
  string(15) "www.example.com"
  ["path"]=>
  string(5) "/path"
  ["query"]=>
  string(17) "googleguy=googley"
}
                

메모

주의 이 함수는 상대 또는 유효하지 않은 URL에 대해 올바른 결과를 제공하지 않을 수 있으며 결과가 HTTP 클라이언트의 일반적인 동작과 일치하지 않을 수도 있습니다. 신뢰할 수 없는 입력의 URL을 구문 분석해야 하는 경우 추가 유효성 검사가 필요합니다. FILTER_VALIDATE_URL 필터와 함께 filter_var()를 사용합니다.

메모: 이 함수는 특히 URI가 아닌 URL을 구문 분석하기 위한 것입니다. 그러나 PHP의 이전 버전과의 호환성 요구 사항을 준수하기 위해 삼중 슬래시(file:///...)가 허용되는 file:// 체계에 대한 예외를 만듭니다. 다른 체계의 경우 이것은 유효하지 않습니다.


기타