본문 바로가기
PHP

[PHP] parse_str()과 http_build_query()로 쿼리 스트링 파싱 및 생성하기

by teamnova 2025. 8. 29.
728x90

웹 개발을 하다 보면 URL 뒤에 붙는 ?key1=value1&key2=value2 형태의 쿼리 스트링(Query String)을 다룰 일이 많습니다.

 

예를 들어, 다른 페이지로 데이터를 전달하거나, API에 요청을 보낼 때 파라미터를 이 형태로 구성합니다.

 

parse_str() 함수는 URL의 쿼리 스트링과 같은 문자열을 PHP 변수나 배열로 분해해주는 함수입니다.

 

예제코드

<?php
$query_string = "name=John+Doe&age=30&city=Seoul";

// 1. 결과를 담을 빈 배열을 미리 선언합니다.
$params = [];

// 2. parse_str()의 두 번째 인자로 배열 변수를 넘겨줍니다.
parse_str($query_string, $params);

// 3. 이제 생성된 변수가 아닌, 배열의 키를 통해 값에 접근합니다.
echo $params['name'];
echo "<br>";
echo $params['age'];
echo "<br>";
echo $params['city'];
?>

방법은 현재 스코프(scope)에 $name, $age, $city라는 변수를 직접 생성합니다. 편리해 보이지만, 외부 입력(쿼리 스트링)에 따라 내 코드의 변수가 예기치 않게 덮어쓰일 수 있는 보안상 취약점을 만들 수 있어 권장되지 않습니다.

 

 

인자인 배열 변수를 사용하여 결과를 받는 것이 비교적 안전한 방법입니다.

예제코드

<?php
$query_string = "name=John+Doe&age=30&skills[]=PHP&skills[]=JavaScript";

$data = []; // 결과를 담을 빈 배열을 선언
parse_str($query_string, $data);

print_r($data);
?>

 

 http_build_query(): 배열을 쿼리 스트링으로 생성해보기

parse_str()의 반대 역할을 합니다. PHP 배열(주로 연관 배열)을 URL 쿼리 스트링 형태로 변환합니다.

예제코

<?php
$params = [
    'category' => 'books',
    'sort' => 'newest',
    'page' => 1
];

$query_string = http_build_query($params);

echo $query_string;
?>

 

활용 예제코드

<?php

$api_params = [
    'api_key' => 'YOUR_API_KEY_HERE',
    'keyword' => 'PHP 강좌',
    'limit' => 20
];

// 배열을 쿼리 스트링으로 변환
$query_string = http_build_query($api_params);

// 최종 요청 URL
$request_url = $base_url . "?" . $query_string;

echo $request_url;
?>

시연 화면