CAFE

[php 중고급] urlencode 와 urldecode 의 사용과 예 [바우스피치(cafe.daum.net/bowspeech)]

작성자바우스피치|작성시간07.02.20|조회수2,684 목록 댓글 0

[바우스피치(http://cafe.daum.net/bowspeech)]


이번엔 URL encode 와 url decode 에 대해서 설명해 보고자 합니다.



먼저 메뉴얼의 urlencode 의 내용입니다.
------------------------------------------------
urlencode
(PHP 3, PHP 4 >= 4.0b1)

urlencode -- URL-encodes string
Description

string urlencode (string str)
------------------------------------------------
urldecode 는 물론 반대라고 생각하면 되겠습니다.


함수로는 urlencode urldecode 로 두개의 함수가 사용됩니다.
사용예를 보겠습니다.

1. 익스플로어에서 버전에 따라 나타날수 있는 한글디렉토리 인식문제 해결
2. 공백이 포함된 파라미터 전달시에..
3. 기타 전달되는 파라미터들의 값들의 간단한 1차적 노출의 회피..정도..

익스플러어의 버전에 따라서 한글디렉토리의 인식문제가 있습니다.
버전은 기억나지 않지만 넷스케이프에선 별다른 문제가 없지만
대부분이 익스플러어 를 사용하고 있는 현재상황을 고려해본다면
무시할수는 없을것입니다.

물론 브라우저의 고급설정에서 UTF-8 로 보냄 설정으로 해결할수 있지만
사용자들의 브라우저의 환경설정까지 바꾸게 요구할수는 없을것입니다.
이를 위해서 URL encode 는 필요하다고 하겠습니다.

그리고 두번째로 공백이 있는 파라미터의 전달의 경우..예를 들면..

<a href="....xx.php3?title=코드라이브님 안녕하세요">여기</a>

이것이 웹브라이저 에서 어떻게 나타날지는 다들 아실겁니다.
그런데 파라미터 값을 보면 공백을 포함하고 있고 실제로 전달되는 내용은
'코드라이브님' 밖에 전달되지 않을것입니다.
이것을 urlencode 로 처리를 한다면 공백을 포함한 모든내용이 전달될수
있습니다.

그리고 1차적인 노출 회피라고 했는데 간단하게 말해서 전달되는 파라미터를
사용자가 보이지 않기를 원할때 입니다. 물론 알파벳이나 - . _ 등이나숫자는
해당되지 않지만 한글을 포함한 특수기호는 변환되어 처리됩니다.

이것 말고도 다양한용도로 쓰일수 있을것이며 적당한 사용은 각자 사용자들이
필요하다 싶을때 사용하면 되겠습니다.

예를 들어 보겠습니다.

1. 첫번째의 경우..


http://chs.ask.co.kr/linker/page/엔터테인먼트/
를 urlencode 처리를 했을때 입니다.

http://chs.ask.co.kr/linker/page/%BF%A3%C5%CD%C5%D7%C0%CE%B8%D5%C6%AE/

로 바꿔주게 되며 이렇게 전달된 주소는 한글디렉토리도 인식하는데 문제가 없습니다.

그런데 한가지 주의해야 할것은 이들 의 변경의 문제는 '/' 까치 처리가 된다는것입니다.
그래서 이것을 '/' 문자로 구분하여 각각을 urlencode 로 처리하고 붙어주어야 합니다.
가장쉬운 방법은 배열을 이용하는 방법이라 생각됩니다.

'/' 문자를 기준으로 각각자르고 배열로 저장한뒤 urlencode 처리한뒤에
다시 '/' 문자로 붙인다면 되겠지요.
이렇게 전달된 주소는 urldecode 에 의해 또다시 decode 될 필요없습니다.

2 .두번째의 경우에는..
echo '<A HREF="mycgi?foo=', urlencode($title), '">';
로 처리한다면 공백도 안전하게 전달될것입니다.

그런데 여기서도 한가지 주의할것이 있습니다.
'&' 기호는 파라미터를 구분하는 기호입니다. 이것이 들어간다면 파라미터의
구분기호로 처리되므로 더욱확실한 방법은
echo '<A HREF="demo.php3?foo=', htmlspecialchars(urlencode ($userinput) ), '">';
처리 하는 방법일 것입니다.

이렇게 전달된 내용은 urldecode 를 통해서 decoding 작업을 거쳐주어야 원래의
값으로 복원이 됩니다.
$foo = urldecode ($foo); 정도로 간단히 원래상태로 복구가 됩니다.


3. 세번째의 경우는 urnencode 만의 함수로도 가능합니다.
$entitle = urlencode($title);
이때에도 urldecode 를 해주어야 원래의 내용을 복원할수 있습니다.


실제로 이렇게 urlencode 로 처리안해도 별다른 문제가 발생하지 않는 경우가
더 많습니다만  잘만들어진 대형사이트의 경우 안전한 파라미터값의 전달을 위해
사용하는곳이 더욱 많습니다.
PHP 뿐만 아니라 웹프로그램을 하다보면 가끔 빼먹어 버릴수 있는 부분이지만
이런부분등을 꼼꼼히 챙긴다면 나중엔 습관처럼 되지 않을까합니다.
다음검색
현재 게시글 추가 기능 열기
  • 북마크
  • 공유하기
  • 신고하기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼