정의 및 사용 방법
PHP 버전 - 4+
parse_str() 함수는 URL에서 사용할 수 있는 형식으로 인코딩된 쿼리 문자열을 디코딩하여 변수로 구문 분석하는데 사용하는 함수입니다.
이 함수는 결과를 반환하는 대신, 두 번째 인자로 전달된 변수에 구문 분석한 데이터를 배열 형태로 저장합니다. 주로 http_build_query() 함수로 인코딩 된 쿼리 문자열을 디코딩하여 변수로 구문 분석하는데 사용합니다.
기본 예제
// URL에서 사용할 수 있는 문자열 형식으로 인코딩할 배열
$data = array(
'name' => 'John Doe',
'age' => 30,
'city' => 'New York'
);
// http_build_query() 함수를 사용하여 쿼리 문자열로 인코딩
$queryString = http_build_query($data);
echo $queryString; // 출력: name=John+Doe&age=30&city=New+York'
// parse_str() 함수를 사용하여 디코딩
// 구문 분석한 데이터를 두 번째 인자인 $decodedArray에 배열 형태로 저장
parse_str($queryString, $decodedArray);
print_r($decodedArray); // 출력: Array ( [name] => John Doe [age] => 30 [city] => New York )
parse_str() 함수는 URL에서 사용할 수 있는 형식으로 인코딩된 쿼리 문자열을 디코딩하여 변수로 구문 분석하는데 사용하는 함수입니다. 주로 http_build_query() 함수로 인코딩된 URL 쿼리를 디코딩합니다. http_build_query() 함수는 주로 배열을 URL 쿼리 문자열로 변환할 때 사용되며, parse_str() 함수는 디코딩하는 역할을 합니다.
parse_str() 함수는 http_build_query() 함수로 인코딩된 URL 쿼리 문자열을 디코딩하여 키-값 쌍으로 변환하고, 이를 배열 또는 변수에 할당합니다.
따라서, parse_str() 함수와 http_build_query() 함수는 서로 반대되는 역할을 수행한다고 할 수 있습니다.
구문
parse_str(string $string, array &$result): void
매개변수
- $string: 디코딩하려는 인코딩된 URL 문자열입니다.
- &$result: 이 매개변수를 설정하면 디코딩된 키-값 쌍이 저장될 배열입니다. 참조 변수입니다.
권장 방법과 비권장 방법
arse_str() 함수는 URL 쿼리 문자열(예: name=John+Doe&age=30)을 PHP 변수로 분석하는 데 사용됩니다. 하지만 이 함수는 어떻게 사용하느냐에 따라 권장되는 방법과 비권장되는 방법으로 나뉩니다. 안전하고 예측 가능한 코드를 위해선 권장 방법을 사용하는 것이 매우 중요합니다.
비권장 방법: 두 번째 인자를 생략하기
parse_str() 함수에 두 번째 인자는 생략하고 쿼리 문자열만 넘겨주는 방식입니다.
$query_string = 'name=John+Doe&age=30';
// 비권장 방법: 결과를 저장할 배열 인자를 생략
parse_str($query_string);
// $name과 $age 변수가 현재 스코프에 직접 생성됩니다.
echo '이름 (비권장 방법): ' . $name . '<br>'; // 출력: '이름 (비권장 방법): John Doe'
echo '나이 (비권장 방법): ' . $age; // 출력: '나이 (권장 방법): 30'
- 코드를 읽는 사람이 parse_str() 함수 때문에 어떤 변수가 갑자기 생겨났는지 한눈에 알기 어렵습니다.
- 이미 코드에 $name이라는 변수가 있는데 parse_str() 때문에 또 다른 $name 변수가 생겨서 기존 변수 값을 덮어쓸 수도 있습니다.
- PHP 7.2.0부터는 이렇게 사용하는 방식에 대해 경고(E_DEPRECATED)가 뜨기 시작했고, PHP 8.0.0부터는 아예 에러(&$result 매개변수 필수)가 나서 작동하지 않습니다.
권장 방법: 두 번째 인자로 배열 전달하기
parse_str() 함수에 쿼리 문자열과 함께 구문 분석된 결과를 저장할 배열 변수를 두 번째 인자로 넘겨주는 방식입니다.
$query_string = 'name=John+Doe&age=30';
// 권장 방법: 결과를 $parsed_data 배열에 저장
$parsed_data = []; // 결과를 저장할 배열을 미리 선언하는 것이 좋습니다.
parse_str($query_string, $parsed_data);
// 파싱된 데이터는 $parsed_data 배열 안에 있습니다.
$name = $parsed_data['name'];
$age = $parsed_data['age'];
echo '이름 (권장 방법): ' . $name . '<br>'; // 출력: '이름 (권장 방법): John Doe'
echo '나이 (권장 방법): ' . $age; // 출력: '나이 (권장 방법): 30'
- 구문 분석된 모든 결과가 지정된 하나의 배열 안에 캡슐화되므로, 외부 입력이 코드 내의 다른 변수를 마음대로 생성하거나 덮어쓰는 것을 원천적으로 방지합니다.
- 코드를 읽을 때 parse_str()의 결과가 $parsed_data라는 특정 배열에 저장된다는 것을 바로 알 수 있어서 코드의 흐름을 이해하기 쉽습니다.
- 변수 이름 충돌 걱정 없이 항상 일관된 방식으로 데이터에 접근할 수 있어 유지보수가 용이합니다.
- PHP 8.0.0 이후 버전에서도 문제없이 작동하는 유일하고 올바른 사용 방법입니다.
참고문헌
PHP parse_str() 関数:URLクエリ文字列のデコード、変数へのパース - codingEverybody
parse_str() 関数は、URLで使用可能な形式にエンコードされたクエリ文字列をデコードして変数にパースするための関数です。主に http_build_query() 関数でエンコードされたクエリ文字列をデコー
codingeverybody.jp
PHP parse_str() 함수 – URL 쿼리 문자열 디코딩, 변수로 구문 분석 - 코딩에브리바디
parse_str() 함수는 URL에서 사용할 수 있는 형식으로 인코딩된 쿼리 문자열을 디코딩하여 변수로 구문 분석하는데 사용하는 함수입니다. 주로 http_build_query() 함수로 인코딩 된 쿼리 문자열을 디코
codingeverybody.kr
PHP parse_str() Function – Parse URL Query Strings into Variables - codingCourses
The parse_str() function parses a URL-encoded query string and stores the result as variables. It's typically used to decode strings generated by http_build_query().
coding.courses