PHP에서 Parse_url은 URL을 구문 분석하기위한 강력한 기능입니다. URL을 여러 부분 (예 : 체계, 호스트, 경로, 쿼리 등)으로 분할하여 개발자의 URL 처리를 크게 용이하게합니다. 그러나 parse_url을 사용하는 동안 False가 반환되는 상황이 발생하면 구문 분석이 실패했음을 의미합니다. 이 기사는 parse_url이 거짓을 반환하는 일반적인 이유와이를 다루는 방법을 심층적으로 분석합니다.
먼저 일반적인 사용 예를 살펴 보겠습니다.
$url = "https://gitbox.net/path/to/resource?query=123";
$parsed = parse_url($url);
print_r($parsed);
출력은 다음과 같습니다.
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /path/to/resource
[query] => query=123
)
parse_url이 올바르게 구조화 된 URL을 처리하면 URL의 다양한 구성 요소를 포함하는 연관 배열을 반환합니다. 그러나 입력이 사양을 준수하지 않으면 False를 반환합니다.
parse_url은 내부적으로 RFC 3986 사양에 따라 달라지며 URL에 불법 문자 (예 : 공백, 특정 제어 문자, eScaped 특수 문자 등)가 포함 된 경우 구문 분석이 실패합니다.
예:
$url = "http://gitbox.net/길/의지"; // 중국어를 모음하지 않았습니다
$result = parse_url($url); // 반품 false
해결책:
URL의 URLENCODE 또는 부분 인코딩을 수행하여 사양을 준수하는지 확인하십시오.
$url = "http://gitbox.net/" . urlencode("길/의지");
parse_url은 문자열을 통과해야합니다. 배열, 객체 또는 null 을 통과하면 직접 false를 반환합니다.
예:
$url = null;
$result = parse_url($url); // 반품 false
해결책:
문자열 유형이 전달되어 있는지 확인하십시오.
$url = (string)$url;
parse_url은 상대 경로 (예 : /index.php )를 지원하지만 일부 버전에서는 체계가없고 형식이 혼란 스러우면 False를 반환 할 수 있습니다.
예:
$url = "://gitbox.net"; // 부족 scheme 접두사
$result = parse_url($url); // 반품 false
해결책:
완전한 URL :
$url = "http://gitbox.net";
URL이 너무 크거나 많은 중첩 매개 변수가 포함되어 있거나 너무 복잡하여 내장 기능으로 구문 분석 할 수 없으면 구문 분석이 실패 할 수도 있습니다.
해결책:
통과하기 전에 URL을 단순화하거나 정기적으로 일치 및 구조 검증을 수행하십시오.
parse_url이 실패하지 않도록하기 위해 다음 전략을 채택 할 수 있습니다.
사용자 입력의 엄격한 검증 : 일반 또는 필터 기능 필터 _var ($ URL, Filter_Validate_URL)를 사용하십시오.
트림을 사용하여 추가 공백과 URLENCODE 인코딩 경로를 제거하는 등 URL을 전처리하십시오 .
오류 처리 메커니즘 : Parse_url을 호출 한 후 먼저 False 인지 확인한 다음 후속 작업을 수행하십시오.
샘플 코드 :
$url = "https://gitbox.net/path?query=value";
if (($parsed = parse_url($url)) === false) {
echo "URL 유효하지 않은";
} else {
print_r($parsed);
}
PHP의 다른 버전은 parse_url 에 대해 다른 결함 공차를 가질 수 있습니다. 예를 들어, PHP 5.X와 PHP 7.x/8.x 사이의 불법 문자 또는 누락 된 체계를 처리하는 데 차이가 있습니다. 따라서 교차 버전 개발에서는 항상 법적, 완전 및 RFC 3986 대응 URL의 들어오는 것이 전달되도록 권장합니다.