현재 위치: > 최신 기사 목록> parse_url IPv6 주소로 URL을 처리하는 방법은 무엇입니까?

parse_url IPv6 주소로 URL을 처리하는 방법은 무엇입니까?

gitbox 2025-05-20

PHP에서 Parse_url은 체계, 호스트, 포트, 경로, 쿼리 등과 같은 구성 요소로 URL을 해체하는 데 사용되는 일반적인 기능입니다.이 기능은 일일 개발에서 매우 실용적이지만 URL에 IPv6 주소가 포함되어 있으면 동작이 약간 더 복잡해집니다. 이 기사는 IPv6 주소를 포함하는 URL을 처리 할 때 parse_url 의 동작과 예방 조치를 탐색합니다.

URL에서 IPv6 주소를 나타내는 방법

RFC 3986 에 따르면 URL의 호스트 부분이 IPv6 주소 인 경우 사각형 브래킷으로 래핑해야합니다. 예를 들어:

 http://[2001:db8::1]:8080/path?query=1

정사각형 괄호의 목적은 포트 번호의 결장에서 분리하고 모호한 모호성을 피하는 것입니다.

parse_url 의 기본 행동

PHP의 parse_url 함수 구문은 다음과 같습니다.

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

IPv6 주소가 포함 된 URL을 통과 할 때 Parse_url은 호스트 부품을 올바르게 식별하고 추출 할 수 있습니다. 특정 예를 살펴 보겠습니다.

 $url = 'http://[2001:db8::1]:8080/path?query=1';
$parts = parse_url($url);

print_r($parts);

출력 결과는 다음과 같습니다.

 Array
(
    [scheme] => http
    [host] => 2001:db8::1
    [port] => 8080
    [path] => /path
    [query] => query=1
)

보시다시피, 정사각형 브래킷은 원래 URL의 IPv6 주소에 사용되지만 Parse_url은 반환 결과에서 사각형 브래킷을 제거하여 순수한 주소 부분 만 남습니다. 이것은 기대에 맞는 행동입니다.

오류 사용의 예

IPv6 주소가 URL의 정사각형 괄호로 올바르게 래핑되지 않으면 Parse_url은 제대로 구문 분석되지 않습니다. 예를 들어:

 $url = 'http://2001:db8::1:8080/path';
$parts = parse_url($url);

Parse_url은 2001 : DB8 :: 1 : 8080이 호스트 또는 호스트 플러스 포트인지 확인할 수 없으므로이 코드는 False를 반환합니다.

요약

  • Parse_url은 IPv6 주소가 사각형 괄호로 감겨 야한다면 IPv6 주소를 포함하는 구문 분석 URL을 지원합니다 [] .

  • 반환 결과의 호스트 필드에는 사각형 괄호가 포함되어 있지 않습니다.

  • IPv6 주소가 정사각형 괄호로 래핑되지 않으면 Parse_url은 구문 분석하고 False를 반환하지 않습니다.

  • 이 기능은 대부분의 표준 URL에 적용되지만 URL의 유효성 검증을 수행하지는 않습니다 (예 : IP 주소가 합법적인지 확인하지 않음).

실용적인 조언

Parse_url을 사용하여 URL을 처리 할 때 (특히 IPv6 주소가 포함될 수있는 시나리오에서) 입력 URL이 RFC 표준, 특히 호스트 부품에 대한 올바른 형식을 따르는지 확인하십시오. 사용자가 입력 한 URL 인 경우 Parse_URL 에 전화하여 구문 분석 실패 또는 보안 문제를 피하기 전에 사전 프로세스 및 형식을 확인하는 것이 좋습니다.