ASP > ASP 에서 UTF-8 처리
1. 모든 ASP 코드 페이지 첫줄에 다음과 같은 코드를 추가합니다
@CODEPAGE="65001" language="vbscript"
session.CodePage = "65001"
Response.CharSet = "utf-8"
Response.buffer=true
Response.Expires = 0
2. Meta 테그를 다음과 같이 추가 합니다.
아리러니하게도 XHTML 과 HTML5 에서의 인코딩 설정은 다르다.
XHTML의 경우에는 아래 코드를 <head> 태그 안에 삽입한다.
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
HTML5의 경우 아래 코드를 <head> 태그 안에 삽입한다.
<meta charset="utf-8">
그리고 주의해야 할 부분이 메타테그 내의 캐릭터셋이다.
만약 타이틀이 한글이라면 브라우저에 따라 캐릭터셋을 선언하기 전부터 한글 인코딩이 결정는 경우가 있다
(이후 캐릭터 셋을 정의한다고 해도 소용없음)
만약 타이틀이 한글일 경우는 순서를 캐릭터셋 선언 이후로 해줘야 한다.
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>가나다</title>
-- 주의 : UTF-8 과 utf-8 은 서로 다른 타입의 인코딩을 제공한다. 한가지로 통일해서 사용하자.
3. Response.ChaRset = "utf-8"
ASP의 response.charset을 이용해서 문자 코드 세트명을 지정하는 부분 입니다.
설정시 <html> 태그 보다 앞에 선언 되어야 HTML 이 출력되면서 해당 속성을 인식하게 됩니다.
4. 에디트플러스나 울트라 에디터에서 수정후 저장할 때 반드시 Encoding 방식을 UTF-8 로 저장합니다
5.DB Insert/Update 시 숫자 타입을 제외한 모든 대상에 N을 추가 합니다
Insert 테이블이름 (칼럼a, 칼럼b) value (N'입력a', N'입력b')
update 테이블이를 set 칼럼a = N'입력a' where 고유칼럼 = '번호'
6.DB like 검색시 N 추가
7. 파일 첨부 DEXT Upload사용(영문으로 설치)
SET uploadform = Server.CreateObject("DEXT.FileUpload")
uploadform.DefaultPath = Server.MapPath(ESP_BBS_DATA)
uploadform.CodePage = 65001
wFileSize = 0
rAttachment = uploadform("txtAttachFile")
If Len(rAttachment) > 0 Then
wFileName = uploadform("txtAttachFile").FileName
wFileSize = uploadform("txtAttachFile").FileLen
response.write uploadform.DefaultPath
rAttachment = uploadform.SaveAs(uploadform.DefaultPath & "" & wFileName , False)
rAttachment = UploadForm.LastSavedFileName
End If
9. CDO Mail발송
Dim iMsg
Dim iConf
Dim Flds
Dim strHTML
Const cdoSendUsingPort = 2 '1:로컬, 2:외부 smtp
set iMsg = CreateObject("CDO.Message")
set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
Flds.item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 '포트번호
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "localhost"
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "" 'ID
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "" '암호
Flds.Update
Set iMsg.Configuration = iConf
iMsg.To = "xxxx@xxx.ccx" 'ToDo: Enter a valid email address.
iMsg.From = "xxxx@xxx.ccx" 'ToDo: Enter a valid email address.
iMsg.Subject = "This is a test CDOSYS message (Sent via Port 25)"
'iMsg..TextBody = strHTMLMsg '// 텍스트
iMsg.HTMLBody = strHTML '// HTML 제목 깨짐 발생..
iMsg.BodyPart.Charset="UTF-8" '/// 한글을 위해선 꼭 넣어 주어야 합니다.
iMsg.HTMLBodyPart.Charset="UTF-8" '/// 한글을 위해선 꼭 넣어 주어야 합니다.
iMsg.Send
End With
Set iMsg = Nothing
Set iConf = Nothing
Set Flds = Nothing
10. 한글 링크가 포함되어 있는 경우 Target 페이지에서 한글이 깨지는 현상 해결 방법
Server 객체의 URLPathEncode 함수를 사용해서 받으면 된다.
Server.UrlEncode() 를 사용해도 됩니다.
fname = request("fname")
<a href="a.asp?fname=<%=Server.URLPathEncode(fname)%>"> 링크가기 </a>
11. 업로드 컴포넌트 UTF-8 지원여부 확인
SiteGalaxy(사이트 갤럭시) 및 ABC 업로드 : utf-8을 지원하지 않음
ABC 업로드 : 4.1 부터 지원
덱스트업로드는 3.x 이후 지원
set UploadForm = Server.CreateObject("ABCUpload4.XForm")
UploadForm.CodePage = 65001
UploadForm.Overwrite = True '덮어쓰기 허용
UploadForm.AbsolutePath = True
UploadForm.MaxUploadSize = 1024*1024*20 '파일용량 (10M)
If UploadForm("board_fname1") <> "" Then
FileCnt = UploadForm("board_fname1").count-1
Else
FileCnt = 0
End If
Dim UpFileName()
Redim UpFileName(FileCnt)
'파일 업로드 처리
For i = 0 To FileCnt
Set theField = UploadForm(Trim("board_fname1"))(i+1)
Next
12. 파일다운로드 - 한글파일명 깨지는 현상
아래소스의 핵심은 Server.URLPathEncode 객체를 이용하는 겁니다.
<a href="a.asp?fname=<%=Server.URLPathEncode(fname)%>"> 다운로드 </a>
<%@ CODEPAGE=65001%>
<%session.CodePage = "65001" %>
<%response.charset = "utf-8"%>
<%
Response.buffer=true
Response.Expires = 0
'Response.ContentType = "application/octet-stream"
'Response.ContentType = "application/unknown"
Response.ContentType="application/x-gzip"
fname = request("fname")
fpath = request("fpath")
Response.AddHeader "Content-Disposition","attachment; filename=" & Server.URLPathEncode(fname)
UP_FILE_DIR = "/file_data/"&FPATH&FNAME
UP_FILE_DIR = Server.MapPath(UP_FILE_DIR)
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile UP_FILE_DIR
strFile = objStream.Read
Response.BinaryWrite strFile
Set objStream = Nothing
response.End
%>
13. Javascript 를 이용하여 한글을 링크 연결할경우는 escape() 함수를 이용하여 링크를 걸어주어야 합니다.
document.location.href = "movepage.aspx?name=" + escape("배철수");