메뉴 건너뛰기

Dev tips

ASP UTF-8에서 URLEncode, URLDecode 구현

taknim 2011.04.02 21:12 조회 수 : 6743 추천:1434

http://www.cftea.com/c/2009/10/OOXX97QIONHANAF9.asp
<%
Function UrlEncode_GBToUtf8(ByVal str)
    Dim B                    ''??字符
    Dim ub                  ''中文字的Unicode?(2字?)
    Dim High8b, Low8b       ''Unicode?的高低位字?
    Dim UtfB1, UtfB2, UtfB3 ''Utf-8?的三?字?
    Dim i, s
    For i = 1 To Len(str)
        B=Mid(str, i, 1)
        ub = AscW(B)
        If (ub>=48 And ub<=57) Or (ub>=65 And ub<=90) Or (ub>=97 And ub<=122) Or ub=42 Or ub=45 Or ub=46 Or ub=64 Or ub=95 Then
            ''48 to 57代表0~9;65 to 90代表A~Z;97 to 122代表a~z
            ''42代表*;46代表.;64代表@;45代表-;95代表_
            s=s & B
        ElseIf ub=32 Then ''空格?成+
            s=s & "+"
        ElseIf ub<128 Then    ''低于128的Ascii?成1?字?
            s=s & "%" & Right("00" & Hex(ub),2)
        Else
            High8b = (ub And &HFF00) / &H100 ''Unicode?高位
            Low8b = ub And &HFF ''Unicode?低位
            UtfB1 = (High8b And &HF0) / &H10 Or &HE0 ''取Unicode高位字?的二?制的前4位 + 11100000
            UtfB2 = ((High8b And &HF) * &H4 + (Low8b And &HC0) / &H40) Or &H80 ''取Unicode高位字?的后4位及低位字?的前2位 +10000000
            UtfB3 = (Low8b And &H3F) Or &H80 ''取Unicode低位字?的二?制后6位 + 10000000
            s = s & "%" & Hex(UtfB1) & "%" & Hex(UtfB2) & "%" & Hex(UtfB3)
        End If
    Next
    UrlEncode_GBToUtf8 = s
End Function


''“?”-AscW("?")=27721(十?制)    01101100 01001001(二?制)     6C49(十六?制)
''?Gb2312??成Utf-8?(十六?制表示)的方法?,先用AscW?Gb2312??Unicode?(2字?),再''?Unicode?的二?制中的位按utf-8(3字?)模板???充 x 位:

''URL解?,Gb2312?面提交到Utf-8?面
Function UrlDecode_GBToUtf8(ByVal str)
    Dim B,ub    ''中文字的Unicode?(2字?)
    Dim UtfB    ''Utf-8??字?
    Dim UtfB1, UtfB2, UtfB3 ''Utf-8?的三?字?
    Dim i, n, s
    n=0
    ub=0
    For i = 1 To Len(str)
        B=Mid(str, i, 1)
        Select Case B
            Case "+"
                s=s & " "
            Case "%"
                ub=Mid(str, i + 1, 2)
                UtfB = CInt("&H" & ub)
                If UtfB<128 Then
                    i=i+2
                    s=s & ChrW(UtfB)
                Else
                    UtfB1=(UtfB And &H0F) * &H1000    ''取第1?Utf-8字?的二?制后4位
                    UtfB2=(CInt("&H" & Mid(str, i + 4, 2)) And &H3F) * &H40        ''取第2?Utf-8字?的二?制后6位
                    UtfB3=CInt("&H" & Mid(str, i + 7, 2)) And &H3F        ''取第3?Utf-8字?的二?制后6位
                    s=s & ChrW(UtfB1 Or UtfB2 Or UtfB3)
                    i=i+8
                End If
            Case Else    ''Ascii?
                s=s & B
        End Select
    Next
    UrlDecode_GBToUtf8 = s
End Function


Private Function UrlEncode_GBToUtf8_V2(szInput)
    Dim wch, uch, szRet
    Dim x
    Dim nAsc, nAsc2, nAsc3
    If szInput = "" Then
        UrlEncode_GBToUtf8_V2= szInput
        Exit Function
    End If
    For x = 1 To Len(szInput)
        wch = Mid(szInput, x, 1)
        nAsc = AscW(wch)
        If nAsc < 0 Then nAsc = nAsc + 65536
        If wch = "+" then
            szRet = szRet & "%2B"
        ElseIf wch = "%" then
            szRet = szRet & "%25"
        ElseIf (nAsc And &HFF80) = 0 Then
            szRet = szRet & wch
        Else
            If (nAsc And &HF000) = 0 Then
                uch = "%" & Hex(((nAsc \ 2 ^ 6)) Or &HC0) & Hex(nAsc And &H3F Or &H80)
                szRet = szRet & uch
            Else
                uch = "%" & Hex((nAsc \ 2 ^ 12) Or &HE0) & "%" & _
                Hex((nAsc \ 2 ^ 6) And &H3F Or &H80) & "%" & _
                Hex(nAsc And &H3F Or &H80)
                szRet = szRet & uch
            End If
        End If
    Next
    UrlEncode_GBToUtf8_V2= szRet
End Function


dim str
str = "1?a千一"
Response.Write(UrlEncode_GBToUtf8(str) & "<br />")
Response.Write(UrlDecode_GBToUtf8(UrlEncode_GBToUtf8(str)) & "<br />")
%>

결과

1%3Fa%E5%8D%83%E4%B8%80
1?a千一

번호 제목 글쓴이 날짜 조회 수
393 [암호화] hash 관련 함수들... taknim 2011.12.20 6593
392 각 브라우저 작업표시줄 탭 미리보기 설정 (Aero Peek 설정) taknim 2011.12.15 7956
391 html에서 엑셀 파일 출력시 해당 컬럼을 텍스트 형식으로 지정 taknim 2011.12.11 8326
390 Gmail 주소 무한대 or 특수기호 무시 taknim 2011.12.10 7480
389 [js] showModalDialog Method taknim 2011.12.05 10081
388 나이 계산 taknim 2011.11.28 7630
387 [js & php] 비밀번호 유효성 체크 - 연속 문자, 같은 문자 taknim 2011.11.09 28095
386 [윈7] 윈7 로그온 화면(잠금 화면) 바꾸기 taknim 2011.10.20 6582
385 [vi] 단어 치환 vi replace taknim 2011.10.10 6149
384 [오라클] 프로시저 확인하기 taknim 2011.10.04 8065
383 navigator.userAgent 정리 taknim 2011.07.06 6610
382 캠핑장 안내 사이트 taknim 2011.06.13 6312
381 [jQuery] 팝업창이나 하위프레임에서 상위 객체를 셀렉트 taknim 2011.06.07 8269
380 키보드 Alt/Ctrl -> 한영전환 레지스트리 [1] file taknim 2011.06.07 7208
379 VBScript Language Reference taknim 2011.05.25 6320
378 [기타] 트위터, 페이스북을 이용한 링크 공유하기 taknim 2011.05.25 13591
377 유용한 ASP 관련 사이트 - w3schools.com taknim 2011.05.10 6460
376 URLDecode, URLEncode Ansi, UTF-8 모음 taknim 2011.04.02 8558
» UTF-8에서 URLEncode, URLDecode 구현 taknim 2011.04.02 6743
374 Ansi(euc-kr, euckr)에서 URLEncode, URLDecode 구현 taknim 2011.04.02 8611