개념 및 사용 방법
urldecode()
함수는
퍼센트 기호(%
)와 그 뒤의 두 자리 16진수로 인코딩된 문자를 원래의 문자로 복원하고,
플러스 기호(+
)는 공백 문자로 변환하는 디코딩 함수입니다.
이 함수는 urlencode()
함수로 인코딩되어 전달된 URL 쿼리 파라미터 값을 복원할 때 주로 사용됩니다.
기본 예제
/* urlencode() 함수를 사용하여 URL에서 사용할 수 있는 형식으로 문자열을 인코딩 */
$url = 'https://www.example.com/page.php?name=John Doe';
$encoded_url = urlencode($url);
echo $encoded_url . '<br>';
// 출력: https%3A%2F%2Fwww.example.com%2Fpage.php%3Fname%3DJohn+Doe
/* urlencode()로 인코딩된 URL을 디코딩 */
$decoded_url = urldecode($url);
echo $decoded_url;
// 출력: https://www.example.com/page.php?name=John Doe
특징
- URL로 인코딩된 문자열을 다시 원래의 문자열로 디코딩하는 함수입니다.
urlencode()
함수로 인코딩된 URL을 디코딩하는데 최적화되어 있습니다.- 플러스 기호(
+
)는 공백으로 바꾼다는 특징이 있습니다.
urlencode()
함수는
주어진 문자열을 URL로 사용할 수 있도록 인코딩합니다. 공백을 플러스(+
) 기호로 바꿉니다. urldecode()
함수는 퍼센트 (%
) 기호와 뒤에 있는 두 개의 16진수 숫자로 이어진 인코딩된 문자를 실제 문자로 변환하여 디코딩하고 더하기 기호(+
)는 공백 문자로 디코딩합니다.
주의하세요!
$_GET
, $_REQUEST
와 같은 슈퍼글로벌 변수의 URL은 이미 디코딩된 상태입니다. 이들 변수에서 urldecode()
함수를 사용하면 예상치 못한 결과 및 보안 문제가 발생할 수 있습니다. 따라서 이러한 변수를 추가로 디코딩하지 않아야 합니다.
urldecode()
함수는 $_GET
, $_REQUEST
와 같이 PHP가 자동으로 디코딩해주는 입력에는 사용하지 않으며,
직접 인코딩된 URL 문자열에서 필요한 경우 디코딩할 때에만 사용합니다.
구문
urldecode(string $string): string
매개변수
$string |
디코딩하려는 인코딩된 URL 문자열입니다. |
---|
반환 값
전달된 문자열 $string
에서 모든 %##
인코딩 형식을 디코딩하고, +
기호를 공백 문자로 디코딩한 후 디코딩된 문자열을 반환합니다.
활용 예제
일반적으로 urlencode() 함수로 인코딩되어 전달된 URL 쿼리 파라미터 값은 PHP에서 $_GET
이나 parse_str()
함수를 통해 자동으로 디코딩된 값을 받아 사용하기 때문에, 대부분의 경우 직접 urldecode()
를 사용할 필요가 없습니다.
하지만 다음과 같은 경우에는 urldecode()
를 직접 사용해야 합니다.
- URL 전체를 문자열로 받아 수동으로 쿼리 문자열을 분석하는 경우
- 외부 API, 로그, 데이터베이스 등에 인코딩된 URL 문자열이 저장되어 있을 때
URL 전체를 문자열로 받아 수동으로 쿼리 문자열을 분석하는 경우
// 원본 문자열
$search = 'hello world!';
// urlencode()로 인코딩
$encodedSearch = urlencode($search);
// URL 생성
$url = 'https://example.com/search.php?q=' . $encodedSearch;
echo "생성된 URL: $url";
// 출력: '생성된 URL: https://example.com/search.php?q=hello+world%21'
// URL에서 쿼리 문자열 추출
$parsedUrl = parse_url($url);
$queryString = $parsedUrl['query']; // 'q=hello+world%21'
// 쿼리 문자열에서 값만 수동으로 추출 (parse_str 미사용)
$queryParts = explode('=', $queryString);
$encodedValue = $queryParts[1]; // hello+world%21
// urldecode()로 명시적 복원
$decodedValue = urldecode($encodedValue);
echo "복원된 검색어 (urldecode 사용): " . $decodedValue;
// 출력: '복원된 검색어 (urldecode 사용): hello world!'
외부 API, 로그, 데이터베이스 등에 인코딩된 URL 문자열이 저장되어 있을 때
// 데이터베이스나 로그에서 불러온 인코딩된 쿼리 문자열 (영어 + 공백 인코딩만 포함)
$encodedQuery = 'name=John+Doe&city=New+York';
// 쿼리 파라미터 각각 분리
$pairs = explode('&', $encodedQuery);
$params = [];
foreach ($pairs as $pair) {
$parts = explode('=', $pair);
$key = $parts[0];
$value = isset($parts[1]) ? $parts[1] : '';
// urldecode()로 직접 디코딩
$params[$key] = urldecode($value);
}
echo '이름: ' . $params['name'] . '<br>'; // 출력: '이름: John Doe'
echo '도시: ' . $params['city'] . '<br>'; // 출력: '도시: New York'