PHP에서 Parse_url은 체계, 호스트, 포트, 경로, 쿼리 등과 같은 구성 요소로 URL을 해체하는 데 사용되는 일반적인 기능입니다.이 기능은 일일 개발에서 매우 실용적이지만 URL에 IPv6 주소가 포함되어 있으면 동작이 약간 더 복잡해집니다. 이 기사는 IPv6 주소를 포함하는 URL을 처리 할 때 parse_url 의 동작과 예방 조치를 탐색합니다.
RFC 3986 에 따르면 URL의 호스트 부분이 IPv6 주소 인 경우 사각형 브래킷으로 래핑해야합니다. 예를 들어:
http://[2001:db8::1]:8080/path?query=1
정사각형 괄호의 목적은 포트 번호의 결장에서 분리하고 모호한 모호성을 피하는 것입니다.
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 에 전화하여 구문 분석 실패 또는 보안 문제를 피하기 전에 사전 프로세스 및 형식을 확인하는 것이 좋습니다.