PHPSnippets

배열에 담긴 모든 값을 urlencode 또는 urldecode 하기

웹사이트 작업을 하다 보면 배열에 값을 담아 넘겨줄 때가 있다. 한글 데이터도 보내고 url 등도 보내기도 하며 Javascript에서 사용하기 위하여 json 등으로 보내기도 한다.
이럴 때 한글, url등과 같은 특수 문자가 들어가는 데이터는 종종 오류를 내 거나 한글의 경우는 한글이 깨져서 출력되는 경우가 있다.
그럴 경우 urlencode로 인코딩을 해서 데이터를 보내면 에러 없이 전송이 가능하다.

아래 함수는 배열로 담아둔 모든 값을 rawurlencode로 한 번에 인코딩시키는 것과 반대로 배열에 담아둔 모든 값을 rawurldecode로 디코딩시키는 함수이다.
배열에 담겨있지 않는 일반 문자열로 사용이 가능하고 1차 배열만이 아니라 다중배열도 하위 상관없이 모두 변환시켜준다.

<?php
// 인코딩
function str_urlencode($data) {
    if(is_array($data)) {
        foreach($data AS $k => $v) {
            if(is_array($v)) $new_data[$k] = str_urlencode($v);
            else $new_data[$k] = rawurlencode($v);
        }
    } else {
        $new_data = rawurlencode($data);
    }

    return $new_data;
}

// 디코딩
function str_urldecode($data) {
    if(is_array($data)) {
        foreach($data AS $k => $v) {
            if(is_array($v)) $new_data[$k] = str_urldecode($v);
            else $new_data[$k] = rawurldecode($v);
        }
    } else {
        $new_data = rawurldecode($data);
    }

    return $new_data;
}
?>