본문 바로가기
IT tech Coding/php

PHP에서 GET 방식으로 전달된 쿼리 문자열 안전하게 처리하기

by Coding Life 2025. 2. 17.

웹 개발을 하다 보면 URL을 통해 데이터를 전달하는 경우가 많다. 특히, GET 방식으로 데이터를 넘길 때 여러 개의 값을 콤마(,)로 구분하여 전달해야 하는 경우가 있다. 그러나 이를 제대로 처리하지 않으면, 잘못된 데이터가 전달되거나 보안 이슈가 발생할 수 있다.

이번 글에서는 JavaScript에서 URL을 생성하여 PHP로 데이터를 안전하게 전달하고, PHP에서 이를 적절히 처리하는 방법을 소개한다.

 

GET 방식으로 데이터 전달 시 문제점

JavaScript에서 window.location.href 또는 XMLHttpRequest를 이용해 데이터를 서버로 보낼 때, 일반적으로 다음과 같은 형식을 사용한다.

var groupCode = "2223,323";
var encodedGroupCode = encodeURIComponent(groupCode);

window.location.href = "view_requestACIgroup.php?groupCode=" + encodedGroupCode;

위 코드에서 groupCode 값은 '2223,323'처럼 콤마(,)로 구분된 문자열이다. 하지만 이 값을 URL에 그대로 넣으면 제대로 동작하지 않을 수 있다. 이유는 다음과 같다:

  • URL에서 ,(콤마)는 특수문자로 간주될 수 있어, 브라우저가 예상치 못한 방식으로 처리할 수 있다.
  • PHP에서 $_GET['groupCode']로 값을 받을 때, 올바르게 해석되지 않을 가능성이 있다.

이를 해결하려면, URL 인코딩을 적용해야 한다.

JavaScript에서 URL 인코딩 적용하기

JavaScript에서 encodeURIComponent()를 사용하면, URL에서 안전하게 사용할 수 있도록 특수문자를 변환할 수 있다.

var groupCode = "2223,323";
var encodedGroupCode = encodeURIComponent(groupCode);

window.location.href = "view_requestACIgroup.php?groupCode=" + encodedGroupCode;

이렇게 하면, groupCode=2223%2C323 형태로 변환되어 서버에 안전하게 전달된다. (%2C는 콤마 ,의 URL 인코딩 값이다.)

PHP에서 GET 데이터 처리하기

이제 PHP에서 안전하게 데이터를 받아 처리해보자. $_GET 또는 $_REQUEST를 사용하여 groupCode 값을 가져올 수 있다.

<?php
$groupCode = isset($_REQUEST['groupCode']) ? $_REQUEST['groupCode'] : '';

// URL 디코딩
$groupCode = urldecode($groupCode);

// 콤마(,)를 기준으로 배열 변환
$groupCodeArray = explode(',', $groupCode);

// 디버깅 출력
print_r($groupCodeArray);
?>

PHP 코드 설명

  1. $_REQUEST['groupCode']로 데이터 가져오기
    • $_GET 또는 $_REQUEST를 사용해 전달된 값을 받아온다.
  2. urldecode($groupCode) 적용
    • JavaScript에서 encodeURIComponent()를 사용해 전달했기 때문에, 이를 다시 원래 문자열로 변환한다.
  3. explode(',', $groupCode)를 사용해 배열로 변환
    • explode() 함수는 콤마(,)를 기준으로 문자열을 나누어 배열로 저장한다.

결과 예시

입력: groupCode=2223%2C323

PHP에서 처리된 결과:

Array (
    [0] => 2223
    [1] => 323
)

이제 groupCodeArray를 활용하여 필요한 작업을 수행할 수 있다.

추가 활용 예제

배열의 데이터를 활용하여 루프를 돌며 처리할 수도 있다.

if (!empty($groupCodeArray)) {
    foreach ($groupCodeArray as $code) {
        echo "코드: " . trim($code) . "<br>";
    }
}

위 코드는 배열 내 모든 요소를 순회하며 trim()을 사용해 공백을 제거한 후 출력한다.

실행 결과

코드: 2223
코드: 323

결론

GET 방식으로 데이터를 전달할 때, 콤마(,)가 포함된 문자열을 안전하게 다루기 위해 JavaScript에서 encodeURIComponent()를 적용하고, PHP에서 urldecode() 후 explode()로 배열 변환하는 방법을 소개했다.

이 방법을 사용하면, 다중 값 데이터를 안전하게 URL을 통해 전달하고, 서버에서 올바르게 처리할 수 있다. 실무에서도 활용도가 높으니 꼭 익혀두자!

반응형