매일 개발에서 개발자는 종종 중국 매개 변수가 포함 된 URL을 처리해야합니다. 한자는 URL에서 직접 사용할 수 없으므로 인코딩되어야합니다. 그렇지 않으면 구문 분석 오류 또는 요청 실패로 이어질 수 있습니다. PHP는 Parse_url이 URL을 구문 분석하는 데 사용되는 여러 URL 관련 기능을 제공하며 URLENCODE는 URL 인코딩 문자열에 사용됩니다. 이 두 기능을 올바르게 결합하는 방법은 중국 매개 변수를 처리하는 열쇠가되었습니다.
이 기사는 Parse_url 및 Urlencode를 사용하여 중국 매개 변수가 포함 된 URL을 올바르게 처리하는 방법을 설명하는 예제를 사용합니다.
URL이 있다고 가정합니다.
https://gitbox.net/search?q=시험&lang=zh
이 URL의 쿼리 매개 변수에는 중국 "테스트"가 포함됩니다. 이 URL을 일부 인터페이스로 직접 전달하면 인코딩이 없어서 인식이 실패 할 수 있습니다. UrlenCode를 사용하여 전체 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
)
이 구문 분석 결과를 통해 원래 쿼리 문자열을 얻을 수 있지만 여기의 쿼리는 처리되지 않은 원래 양식입니다.
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);
마지막으로 처리 된 부품을 완전한 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 요청 라이브러리에 적합합니다.
재사용의 편의를 위해 위의 논리를 함수로 캡슐화 할 수 있습니다.
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
PHP에 중국 매개 변수가 포함 된 URL을 처리 할 때는 전체 URL에 직접 UrlenCode를 사용할 수는 없지만 다음을 수행해야합니다.
parse_url을 사용하여 URL을 찢습니다.
parse_str를 사용하여 쿼리 부분을 분리하십시오.
각 매개 변수 값에 대해 UrlenCode 인코딩을 사용하십시오.
http_build_query를 사용하여 쿼리를 재구성합니다.
완전한 URL에 스 플라이 싱.
이 방법은 URL 구조를 유지할뿐만 아니라 중국어로 인한 문제를 피하면서 매개 변수의 올바른 인코딩을 보장합니다.