banner_Vultr

DigitalOcean Referral Badge

2016년 9월 21일 수요일

ASP 다국어(UTF-8) 사이트 개발

[ASP 다국어(UTF-8) 사이트 개발]
다국어 지원 사이트에 관련된 정보라면 포탈의 검색창에 입력만 하면 많은 정보들이 주르륵 쏟아져 나오기 때문에 실개발 작업에 있어서는 큰 어려움 없이 개발 가능하지만 여전히 복병은 존재합니다.

그중 한가지 복병이 업로드 컴포넌트에 관련된 부분인데 Dextupload 컴토넌트 같은 상용 컴포넌트를 사용한다면 UTF-8이 지원되기 때문에 문제될 것이 없지만 일부 컴포넌트에서는 UTF-8 지원 여부를 테스트 해 보아야 합니다.
많이 사용되는 ABCUpload 컴포넌트는 4.1 이하 버전이 코드페이지가 지원되지 않았던 걸로 기억됩니다. ABCUpload 컴포넌트 4.0 버전을 사용하신다면 4.1 이상 버전으로 업그레이드 하셔야 합니다.

아래는 ASP로 다국어 지원 사이트 개발에 참고하셔야 할 내용을 순차적으로 정리한 것입니다.

1. 페이지의 최상단에 아래의 문구를 삽입합니다.

<!-- 페이지의 UTF-8 캐릭터셋 정의 -->
<%@ CODEPAGE = 65001 %>
<%Response.Charset = "UTF-8" %>

CODEPAGE = 65001 대신에 Session.CodePage = 65001을 사용하게 되면 변수에 한글또는 중문,일문등의 다국어가 대입될때 에러가 발생하게 됩니다.

순수 html 로 정의된 페이지에서는 Response 대신에 아래와 같이 메타태그를 이용해서 UTF-8 인코딩을 지정합니다.

<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>

2. html, asp, css, js 등 웹사이트에 사용되는 모든 문서는 UTF-8 로 인코딩되어 저장 되어야 합니다.


3. Get 방식으로 전송되는 데이터는 아래와 같이 인코딩 해줍니다. 아래의 sendData는 임의의 변수명입니다.
sendData = Server.URLEncode(sendData)

4. 데이터베이스(테이블) 생성시, 다국어 데이터가 삽입되는 컬럼은 nchar, nvarchar, ntext 등의 n이 붙은 데이터 형식으로 설정합니다.

5.
데이터 Insert나 Update시 nchar,nvarchar 등등의 다국어 지원 컬럼에 삽입되는 변수 앞에는 N을 붙여줍니다.( 아래
예제 참조! )

<%
     SQL = " Insert INTO "& tbltest
                 SQL = SQL&" ("
                 SQL = SQL&" seq"
                 SQL = SQL&",name"
                 SQL = SQL&",subject"
                 SQL = SQL&",contents"
                 SQL = SQL&",insert_date"
                 SQL = SQL&") Values ("
                 SQL = SQL & seq
                 SQL = SQL &",N'"&name&"'"
                 SQL = SQL &",N'"&subject&"'"
                 SQL = SQL &",N'"&contents&"'"
                 SQL = SQL &", getDate()"
                 SQL=SQL&")"
                 dbCon.Execute(SQL)
%>


6
. 업로드 컴포넌트 사용시 UTF-8 지원여부를 테스트해봐야 합니다.
ABCUpload 컴포넌트인 경우 4.1 부터는 코드페이지가 지원 되었음에도 불구하고 한글,중문등이 깨져서 저장되었습니다. 코드 페이지는 아래와 같이 정의하고 받는쪽을 아래와 같이 수정해 주시면 깨짐없이 잘 입력되었습니다.

ABCUPload 컴포넌트인 경우의 예

//코드페이지 정의
Set theABC = Server.CreateObject("ABCUpload4.XForm")
theABC.codePage = 65001



// 받는 페이지
name=trim(theABC("name")(1))
subject=trim(theABC("subject")(1))
contents=trim(theABC("contents")(1))

댓글 없음:

댓글 쓰기