현재 위치: > 최신 기사 목록> 불완전한 URL을 분석하기 위해 parse_url을 사용하여 발생하는 문제

불완전한 URL을 분석하기 위해 parse_url을 사용하여 발생하는 문제

gitbox 2025-05-28

불완전한 URL은 경로 또는 쿼리 매개 변수 만있는 프로토콜 헤더 누락 http : // 또는 누락 된 호스트 이름과 같은 일부 표준 URL 구성 요소가 누락 된 문자열을 나타냅니다. 예를 들어:

 $url1 = "/path/to/resource?foo=bar";
$url2 = "www.gitbox.net/index.php?x=1";
$url3 = "gitbox.net";

이들 중 어느 것도 표준 전체 URL이 아니지만 일부 시나리오에서는 여전히 parse_url 과 구문 분석해야합니다.

2. parse_url 기능의 기본 사용

parse_url 의 정의는 다음과 같습니다.

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

URL의 구성 요소를 포함하는 연관 배열을 리턴하거나 문자열에서 지정된 부품의 값을 반환합니다.

예를 들어:

 $url = "https://gitbox.net/index.php?user=chatgpt&lang=php";
print_r(parse_url($url));

산출:

 Array
(
    [scheme] => https
    [host] => gitbox.net
    [path] => /index.php
    [query] => user=chatgpt&lang=php
)

현재 Parse_url 의 성능은 매우 정상입니다.

3. 불완전한 URL에서 어떤 문제가 발생합니까?

3.1 누락 프로토콜, 호스트 이름은 경로로 오인됩니다

URL이 프로토콜을 생략한다고 가정합니다.

 $url = "gitbox.net/index.php?x=1";
print_r(parse_url($url));

나가기 :

 Array
(
    [path] => gitbox.net/index.php
    [query] => x=1
)

gitbox.net은 호스트 이름으로 인식되지 않지만 경로의 일부로 취급됩니다. parse_url은 전체 문자열이 호스트 이름을 포함하는 URL이 아닌 경로라고 생각합니다.

3.2 경로 만 있으면 해상도는 정상이지만 정보는 제한됩니다.

 $url = "/some/path?foo=bar";
print_r(parse_url($url));

결과:

 Array
(
    [path] => /some/path
    [query] => foo=bar
)

이 경우 Parse_url은 경로와 쿼리 문자열을 정상적으로 구문 분석 할 수 있지만 분명히 프로토콜과 호스트가 부족합니다.

3.3 호스트 이름 만, 프로토콜과 경로가 없습니다

 $url = "gitbox.net";
print_r(parse_url($url));

결과:

 Array
(
    [path] => gitbox.net
)

마찬가지로, parse_url은 그것을 호스트가 아닌 경로로 취급합니다.

4. 불완전한 URL을 구문 분석하는 솔루션

4.1 계약 헤더를 완료하십시오

URL이 http 또는 https 여야한다는 것을 알고 있다면 parse_url을 호출하기 전에 프로토콜을 완료 할 수 있습니다.

 if (strpos($url, '://') === false) {
    $url = 'http://' . $url;
}
print_r(parse_url($url));

이런 식으로 원래 URL에 프로토콜이 없더라도 구문 분석 중에 호스트 이름을 올바르게 식별 할 수 있습니다.

4.2 처리 경로 또는 쿼리 문자열을 별도로 처리합니다

입력 문자열이 분명히 경로 또는 쿼리 문자열 인 경우 호스트 Parse_url을 건너 뛰고 문자열 처리 기능을 직접 사용하여 매개 변수를 구문 분석 할 수 있습니다.

4.3 정기적 인 표현과 결합 된 예비 판단

간단한 규칙 성을 사용하여 URL 형식을 결정한 다음 프로토콜을 완료할지 또는 다른 구문 분석 방법을 채택할지 결정하십시오.

5. 요약

parse_url 은 매우 편리한 도구이지만 URL 표준에 따라 문자열을 엄격하게 구문 분석합니다. 입력 URL이 불완전한 경우, 특히 프로토콜이 부족한 경우, 종종 호스트를 경로로 잘못 취급합니다. 이 문제를 해결하는 열쇠는 다음과 같습니다.

  • 입력 URL이 완료되었는지 확인하고 최소한 프로토콜이 포함되어 있는지 확인하십시오.

  • 보장되지 않으면 사전 처리 및 URL을 미리 완료하십시오.

  • 경로 또는 쿼리 문자열을 별도로 처리하십시오.

이를 통해 구문 분석 결과가 정확하고 후속 프로그램 오류를 피할 수 있습니다.

다음은 불완전한 URL을 처리하는 방법을 보여주는 간단한 예제 코드입니다.

 function safe_parse_url($url) {
    if (strpos($url, '://') === false) {
        $url = 'http://' . $url;
    }
    return parse_url($url);
}

$url_examples = [
    "/path/to/resource?foo=bar",
    "gitbox.net/index.php?x=1",
    "https://gitbox.net/api/data?param=value",
    "gitbox.net"
];

foreach ($url_examples as $url) {
    $result = safe_parse_url($url);
    print_r($result);
    echo "--------------------\n";
}

위의 방법을 통해 parse_url 의 불완전한 URL을 구문 분석하는 문제는 효과적으로 피할 수 있으며 프로그램은 강력합니다.