정의 및 사용 방법
- PHP 버전
- 4+
parse_url() 함수는
주어진 URL 문자열을 구문 분석하고 URL 구성 요소를 반환합니다.
scheme, host, port, user, pass, path, query, fragment와 같은 URL 구성 요소를 반환합니다.
기본 예제
$url = 'https://www.example.com/path/to/resource?query=string&foo=bar';
var_dump(parse_url($url));
/*
array(4) {
["scheme"]=> string(5) "https"
["host"]=> string(15) "www.example.com"
["path"]=> string(17) "/path/to/resource"
["query"]=> string(20) "query=string&foo=bar"
}
*/
var_dump(parse_url($url, PHP_URL_SCHEME)); // string(5) "https"
var_dump(parse_url($url, PHP_URL_USER)); // NULL
var_dump(parse_url($url, PHP_URL_PASS)); // NULL
var_dump(parse_url($url, PHP_URL_HOST)); // string(15) "www.example.com"
var_dump(parse_url($url, PHP_URL_PORT)); // NULL
var_dump(parse_url($url, PHP_URL_PATH)); // string(17) "/path/to/resource"
var_dump(parse_url($url, PHP_URL_QUERY)); // string(20) "query=string&foo=bar"
var_dump(parse_url($url, PHP_URL_FRAGMENT)); // NULL
URL 구성 요소
URL 구성 요소에 대한 이해를 돕기 위해 먼저 URL의 기본 구조를 살펴보겠습니다.
URL은 일반적으로 다음과 같은 여덟 가지 요소로 나눌 수 있습니다.
이 여덟 가지 요소 중에서 scheme과 host는 일반적인 웹 URL(절대 URL) 구성에 필요한 요소이며, 나머지 구성 요소들은 특정 상황이나 용도에 따라 선택적으로 URL에 포함할 수 있습니다.
scheme: 프로토콜을 나타냅니다. 예시:http,https,ftp등이 있습니다.user: 사용자 이름을 나타냅니다. 예시:username(예,ftp://username@host)pass: 인증에 사용되는 사용자 비밀번호를 나타냅니다. 예시:password(예,ftp://username:password@host)host: 서버를 식별하는 도메인 이름이나 IP 주소를 나타냅니다. 예시:www.example.com,192.168.1.1port: 서버와 통신하기 위해 사용하는 포트 번호를 나타냅니다. 기본 포트와 다른 포트를 사용할 때 명시합니다. 예를 들어,http프로토콜의 기본 포트는80이고,https의 기본 포트는443입니다. 예시:8080(예,http://www.example.com:8080)path: 리소스를 식별하는 경로를 나타냅니다. 예시:/path/to/resource(예,http://www.example.com/path/to/resource)query: URL에 추가 정보를 전달하는 쿼리 문자열을 나타내며,?뒤에 위치하고 여러 값은&로 구분됩니다. 예시:key1=value1&key2=value2(예,http://www.example.com/path?key1=value1&key2=value2)fragment: 문서 또는 리소스 내의 특정 부분을 가리키며,#으로 시작합니다. 예시:section1(예,http://www.example.com/path#section1)
구문
parse_url(string $url, int $component = -1): int|string|array|null|false
매개변수
$url |
필수. 분석할 URL 문자열입니다. |
|---|---|
$component |
옵션. 반환할 구성 요소를 지정하는데 사용됩니다. 기본값은 -1이며, 이는 모든 구성 요소를 연관 배열로 반환함을 의미합니다.
그리고, 다음 값 중 하나를 사용하면 특정 구성 요소만을 반환할 수 있습니다.
|
반환 값
잘못 구성된 URL(malformed URL)이 입력된 경우 parse_url() 함수가 false를 반환할 수 있습니다.
연관 배열 또는 구성 요소 값: 지정된 $component에 따라 다르게 반환됩니다.
반환값 타입을 정리하면 다음과 같습니다.
반환되는 값은 자동으로 URL 디코딩(percent-decoding)되지 않으므로, 필요한 경우 별도로 디코딩해야 합니다.
변경 이력
| 버전 | 설명 |
|---|---|
| 8.0.0 이전 | parse_url() 함수가 반환하는 query와 fragment 요소는 URL에 해당 구성 요소가 없거나 비어 있는 경우 모두 NULL로 설정되었습니다. |
| 8.0.0부터 | URL의 query나 fragment가 비어 있는 경우 빈 문자열("")을 반환하고, 실제로 존재하지 않는 경우에는 NULL을 반환하여 구별합니다. |
http://example.com/foo → query = NULL, fragment = NULL http://example.com/foo? → query = NULL, fragment = NULL http://example.com/foo# → query = NULL, fragment = NULL http://example.com/foo?# → query = NULL, fragment = NULL
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 = ""
잘못 구성된 URL(malformed URL)이 입력된 경우 parse_url() 함수는 false를 반환할 수 있습니다.
$url = 'http://:80';
var_dump(parse_url($url)); // bool(false)
주의할 점
parse_url() 함수는 부분적이거나 일부 유효하지 않은 URL도 분석할 수 있지만, 주어진 URL의 유효성을 검증하는 함수가 아니라는 점에 유의해야 합니다.
메모
- 이 함수는 일반적인 URI 전체가 아닌 URL을 구문 분석하기 위해 설계되었습니다. 다만, 이전 버전과의 호환성을 위해 삼중 슬래시(
file:///...)를 사용하는file://스킴은 예외적으로 허용됩니다. (다른 스킴에서는 이러한 형식이 유효하지 않습니다.) - 또한, 상대 URL을 처리하도록 설계되지 않았으므로 상대 URL 입력 시 올바른 결과를 제공하지 않을 수 있습니다.
URL의 유효성 검증
parse_url() 함수는 URL의 구성 요소를 분석하는 데 사용되며, URL의 유효성을 검사하는 데는 적합하지 않습니다. URL의 유효성을 검사하려는 경우 PHP에서는 filter_var() 함수와 FILTER_VALIDATE_URL 필터를 사용하는 것이 좋습니다.
filter_var() 함수와 FILTER_VALIDATE_URL 필터를 사용하면 간단하게 URL의 유효성 검사를 할 수 있습니다.
filter_var(string $url, FILTER_VALIDATE_URL)
/*
$url이 유효한 URL이면 true 아니면 false를 반환
*/
올바른 URL 형식인지를 확인하기 위해 filter_var() 함수를 사용하는 간단한 예제를 살펴보겠습니다.
일러두기
소개하는 예제 코드가 모든 URL을 정확히 유효한지 검증하는 데에는 한계가 있습니다. 추가적인 적절한 조치가 필요할 수 있습니다. 또한 보안 관련 목적으로 참조할 경우에는 보안에 관련된 유효성 검증에 대한 조치가 추가로 필요합니다.
$user_input_url = $_POST['url'];
if (filter_var($user_input_url, FILTER_VALIDATE_URL)) {
echo '올바른 URL입니다.';
} else {
echo '잘못된 URL 형식입니다.';
}
이렇게 함으로써 filter_var() 함수를 사용하여 URL의 유효성을 간단하게 확인할 수 있습니다.
parse_url() 함수는 URL 구성 요소 분석 용도로만 사용해야 합니다.