ASP 학습
ASP뉴스그룹의 멍멍이님께서 작성하신 함수 인데 퍼왔슴다.. ^^
요즘 PC팔고 계시다는데.. 장사 잘되시길 바랍니다..ㅋㅋ
Public Function URLEncodeUTF8(byVal szSource)
Dim szChar, WideChar, nLength, i, result
nLength = Len(szSource)
'szSource = Replace(szSource," ","+")
For i = 1 To nLength
szChar = Mid(szSource, i, 1)
If Asc(szChar) < 0 Then
WideChar = CLng(AscB(MidB(szChar, 2, 1))) * 256 + AscB(MidB(szChar, 1, 1))
If (WideChar And &HFF80) = 0 Then
result = result & "%" & Hex(WideChar)
ElseIf (WideChar And &HF000) = 0 Then
result = result & _
"%" & Hex(CInt((WideChar And &HFFC0) / 64) Or &HC0) & _
"%" & Hex(WideChar And &H3F Or &H80)
Else
result = result & _
"%" & Hex(CInt((WideChar And &HF000) / 4096) Or &HE0) & _
"%" & Hex(CInt((WideChar And &HFFC0) / 64) And &H3F Or &H80) & _
"%" & Hex(WideChar And &H3F Or &H80)
End If
Else
result = result + szChar
End If
Next
URLEncodeUTF8 = result
End Function
'---------------------------------------------------------------------
' URLDecodeUTF8 (UTF8 --> 아스키 )
' mongmong - 2003. 10 (URLEncodeUTF8 참조)
'---------------------------------------------------------------------
Public Function URLDecodeUTF8(byVal pURL)
Dim i, s1, s2, s3, u1, u2, result
pURL = Replace(pURL,"+"," ")
For i = 1 to Len(pURL)
if Mid(pURL, i, 1) = "%" then
s1 = CLng("&H" & Mid(pURL, i + 1, 2))
'2바이트일 경우
if ((s1 AND &HC0) = &HC0) AND ((s1 AND &HE0) <> &HE0) then
s2 = CLng("&H" & Mid(pURL, i + 4, 2))
u1 = (s1 AND &H1C) / &H04
u2 = ((s1 AND &H03) * &H04 + ((s2 AND &H30) / &H10)) * &H10
u2 = u2 + (s2 AND &H0F)
result = result & ChrW((u1 * &H100) + u2)
i = i + 5
'3바이트일 경우
elseif (s1 AND &HE0 = &HE0) then
s2 = CLng("&H" & Mid(pURL, i + 4, 2))
s3 = CLng("&H" & Mid(pURL, i + 7, 2))
u1 = ((s1 AND &H0F) * &H10)
u1 = u1 + ((s2 AND &H3C) / &H04)
u2 = ((s2 AND &H03) * &H04 + (s3 AND &H30) / &H10) * &H10
u2 = u2 + (s3 AND &H0F)
result = result & ChrW((u1 * &H100) + u2)
i = i + 8
end if
else
result = result & Mid(pURL, i, 1)
end if
Next
URLDecodeUTF8 = result
End Function

XE는 utf8형식으로사용해서 질문드리는겁니다.
cSangsa.text ="거성(안산)" 이것을 제가만든 DB에 insert 할때
? URLEncodeUTF8(csangsa)
%EA%B1%B0%EC%84%B1(%EC%95%88%EC%82%B0)
변환하면 이렇게 나옵니다.
? URLDecodeUTF8("%EA%B1%B0%EC%84%B1(%EC%95%88%EC%82%B0)")
거성(안산)
이값을 다시 디코딩하면 정상적으로 나옵니다.
근데 문제는 DB에 insert 될경우에 %EA%B1%B0%EC%84%B1(%EC%95%88%EC%82%B0) 이값이 그대로 insert되네요
이값을 VB에서 가져와서 디코딩햇을경우 정상적으로 나오면 이건 괜찮은데
홈페이지(XE)에서 만약 %EA%B1%B0%EC%84%B1(%EC%95%88%EC%82%B0) 이것을 사용했을경우에는
거성(안산) 이렇게 보이는지 궁금합니다.
그럼 좋은 하루 되세요..