현재 위치: > 최신 기사 목록> parse_url 및 urlencode를 사용하여 인코딩 처리를 올바르게하십시오

parse_url 및 urlencode를 사용하여 인코딩 처리를 올바르게하십시오

gitbox 2025-05-26

매일 개발에서 개발자는 종종 중국 매개 변수가 포함 된 URL을 처리해야합니다. 한자는 URL에서 직접 사용할 수 없으므로 인코딩되어야합니다. 그렇지 않으면 구문 분석 오류 또는 요청 실패로 이어질 수 있습니다. PHP는 Parse_url이 URL을 구문 분석하는 데 사용되는 여러 URL 관련 기능을 제공하며 URLENCODE는 URL 인코딩 문자열에 사용됩니다. 이 두 기능을 올바르게 결합하는 방법은 중국 매개 변수를 처리하는 열쇠가되었습니다.

이 기사는 Parse_urlUrlencode를 사용하여 중국 매개 변수가 포함 된 URL을 올바르게 처리하는 방법을 설명하는 예제를 사용합니다.

1. 문제 배경

URL이 있다고 가정합니다.

 https://gitbox.net/search?q=시험&lang=zh

이 URL의 쿼리 매개 변수에는 중국 "테스트"가 포함됩니다. 이 URL을 일부 인터페이스로 직접 전달하면 인코딩이 없어서 인식이 실패 할 수 있습니다. UrlenCode를 사용하여 전체 URL을 전체로 인코딩하면 콜론, 슬래시, 물음표 등과 같은 구조적 혼란이 발생하여 잘못 인코딩됩니다.

따라서 전체 URL이 아닌 "값"을 정확하게 인코딩해야합니다.

2. parse_url을 사용하여 URL을 분해하십시오

먼저 Parse_url을 사용하여 URL의 다양한 구성 요소를 분해합니다.

 $url = 'https://gitbox.net/search?q=시험&lang=zh';
$parsed = parse_url($url);

print_r($parsed);

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

 Array
(
    [scheme] => https
    [host] => gitbox.net
    [path] => /search
    [query] => q=시험&lang=zh
)

이 구문 분석 결과를 통해 원래 쿼리 문자열을 얻을 수 있지만 여기의 쿼리는 처리되지 않은 원래 양식입니다.

3. 쿼리 매개 변수 추출 및 프로세스

parse_str를 사용하여 쿼리 부분을 연관 배열로 변환 한 다음 값을 인코딩 할 수 있습니다.

 parse_str($parsed['query'], $queryParams);

foreach ($queryParams as $key => $value) {
    $queryParams[$key] = urlencode($value);
}

이제 $ QueryParams 의 각 값은 URL 보안 형식으로 올바르게 인코딩됩니다.

다음 으로이 매개 변수를 쿼리 문자열로 다시 스티칭해야합니다.

 $encodedQuery = http_build_query($queryParams);

이것은 다음 문자열을 생성합니다.

 q=%E6%B5%8B%E8%AF%95&lang=zh

참고 : 값을 인코딩 할 때 HTTP_BUILD_QUERY 는 기본적으로 공간을 플러스 부호 ( + )로 변환합니다. 공간을 %20 으로 표현하려면 두 번째 매개 변수를 추가 할 수 있습니다.

 $encodedQuery = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986);

4. 완전한 URL을 스플 라이스합니다

마지막으로 처리 된 부품을 완전한 URL로 다시 스티칭합니다.

 $finalUrl = $parsed['scheme'] . '://' . $parsed['host'] . $parsed['path'] . '?' . $encodedQuery;

echo $finalUrl;

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

 https://gitbox.net/search?q=%E6%B5%8B%E8%AF%95&lang=zh

이 URL의 중국 매개 변수는 이제 안전하게 인코딩되며 모든 브라우저 또는 HTTP 요청 라이브러리에 적합합니다.

5. 함수로 캡슐화

재사용의 편의를 위해 위의 논리를 함수로 캡슐화 할 수 있습니다.

 function encodeUrlQuery($url) {
    $parsed = parse_url($url);
    if (!isset($parsed['query'])) {
        return $url;
    }

    parse_str($parsed['query'], $queryParams);

    foreach ($queryParams as $key => $value) {
        $queryParams[$key] = urlencode($value);
    }

    $encodedQuery = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986);

    $result = $parsed['scheme'] . '://' . $parsed['host'];
    if (isset($parsed['path'])) {
        $result .= $parsed['path'];
    }
    $result .= '?' . $encodedQuery;

    return $result;
}

사용 방법 :

 $url = 'https://gitbox.net/search?q=시험&lang=zh';
echo encodeUrlQuery($url);

산출:

 https://gitbox.net/search?q=%E6%B5%8B%E8%AF%95&lang=zh

6. 요약

PHP에 중국 매개 변수가 포함 된 URL을 처리 할 때는 전체 URL에 직접 UrlenCode를 사용할 수는 없지만 다음을 수행해야합니다.

  1. parse_url을 사용하여 URL을 찢습니다.

  2. parse_str를 사용하여 쿼리 부분을 분리하십시오.

  3. 각 매개 변수 값에 대해 UrlenCode 인코딩을 사용하십시오.

  4. http_build_query를 사용하여 쿼리를 재구성합니다.

  5. 완전한 URL에 스 플라이 싱.

이 방법은 URL 구조를 유지할뿐만 아니라 중국어로 인한 문제를 피하면서 매개 변수의 올바른 인코딩을 보장합니다.