티스토리 뷰

ASP에서 Server.URLEncode를 잘 활용하는 방법
 저자:Jeffrey Humpherys| 날짜: 2001년 09월 21일
사용자 삽입 이미지
 

사용자 삽입 이미지

ASP에서 숫자, 알파벳 문자가 아닌 것(0~9, a~z이 아닌 문자)을 아스키 헥사 코드로 변환시켜주는 메쏘드가 있다. 그것은 바로 Server.UrlEncode이다. 이 메쏘드는 해당 문자를 16진수 아스키 코드로 변환시킨 후 그 앞에 %를 붙인다(빈 문자열은 + 기호로 변환된다). 예를 들어,
 

strURL = "http://korea.interent.com/default.asp?id=123&usr=daniel"

이라고 되어 있는 문자열을 Server.UrlEncode(strURL) 메쏘드를 통해 다음과 같이 변경시킬 수 있다:

http%3A%2F%2Fkorea%2E4internet%2Ecom%2Fdefault%2Easp%3Fid%3D123%26usr%3Ddaniel

아마도 이 메쏘드를 어떤 경우에 사용할지 궁금한 사람들이 있을 것이다. 그렇다면 다음과 같은 경우를 살펴 보자. 만일 어떤 URL에서 QueryString으로 원하는 값을 받으려고 할 때 다음과 같이 어떤 주소 값을 받아야 할 경우가 있다:

<a href="http://www.myserver.com/SomePage.asp?URL=http://korea.internet.com/default.asp?id=123&usr=daniel">
   이곳을 클릭하세요!
</a>

위의 코드는 querystring으로?URL=http://korea.internet.com/default.asp?id=123&usr=daniel부분을 http://www.myserver.com/SomePage.asp에 넘긴 경우이다. 위와 같은 경우 ? 표시가 두 군데(하나는 SomePage.asp다음에, 또 하나는 default.asp 다음에) 있기 때문에 querystring을 캡쳐해오는데 어려움을 겪을 수 있다. 또한 & 표시를 기준으로 "변수이름/값"이 하나의 쌍으로 이루어진 querystring에서 위와 같은 경우 URL=http://korea.internet.com/default.asp?id=123과 user=daniel이란 두 개의 변수이름/값 쌍이 존재하는 것으로 IIS는 생각할 수가 있다. 하지만 그 URL 주소를 생성한 사람은 URL이란 변수에 http://korea.internet.com/default.asp?id=123&use=daniel이란 값이 들어 있는 하나의 변수이름/값 쌍을 염두에 두었을 것이다. 조금 장황하게 설명하긴 했지만, 이런 문제를 해결하기 위해 Server.UrlEncode를 사용할 수가 있다.

이런 문제가 가장 빈번히 생길 수 있는 경우는, 다음과 같은 경우이다.

회원인증을 거쳐야지만 어떤 페이지를 볼 수 있도록 한 사이트에서, 로그인을 거치지 않은 사용자가 해당 페이지에 접근하려고 하면 먼저 로그인 페이지로 유도한 후 로그인을 했을 경우 원래 접근하려고 했던 페이지로 이동시켜주는 경우를 생각해 보자. 이럴 경우 로그인 페이지인 login.asp에 원래 접근하고자 했던 페이지가 있는 URL 주소를 querystring으로 넘겨준다. 이 때 URL 주소에도 역시 querystring이 있을 경우 이 URL 주소를 Server.UrlEncode로 변경시켜주도록 한다.

이제 위에서 예를 든 경우를 어떻게 구현하는지 알아 보자.

strURL = "http://korea.interent.com/default.asp?id=123&usr=daniel"
strEncodedUrl = Server.UrlEncode(strURL)

Response.redirect "login.asp?backlink=" & strEncodedUrl

위와 같은 경우 Response.redirect에는 "login.asp?backlink=http%3A%2F%2Fkorea%2E4internet%2Ecom%2Fdefault%2Easp%3Fid%3D123%26usr%3Ddaniel이란 값이 넘어가게 된다.

그렇다면 login.asp에서는 인코딩 된 URL을 어떻게 받을 수 있을까? login.asp에서는 특별히 해줄 것이 없다. 원래 하던대로 다음과 같이 Request.Querystring만 호출해주면 된다.

Request.Querystring("backlink")

지금까지 살펴본 Server.UrlEncode를 직접 테스트 해보고 싶다면 아래 링크를 클릭해 보기 바란다:

Server.UrlEncode 테스트

<FORM id=form1 name=form1 method=post>원하는 URL주소를 입력해 보세요:
<INPUT name=txtEncode>

<INPUT id=submit1 type=submit value="Server.UrlEncode 결과 보기" name=submit1> </FORM>