ASP Classic UTF-8 Server.URLEncode sorun

4 Cevap php

Ben HTTP üzerinden geçmek kodlanmış metin UTF-8 dizesi kodlayan rahatsız URL biraz yaşıyorum. Ben "é" karakteri kodlama yapmak için klasik ASP (VBScript) olarak Server.URLEncode kullanıyorum.

Bu şu dizeyi üretir,

% C3% 83% C2% A9

Ben HTTP üzerinden konuşuyorum sistem ancak PHP ve bu dize çözülemiyor. Bir PHP encoder kullanarak http://www.albionresearch.com/misc/urlencode.php PHP URL kodlama yöntemi kullanılarak kodlanan aynı karakter olarak çıkıyor

% E9

PHP sistemi başarıyla onları deşifre böylece herkes başarıyla benim ASP benim UTF-8 kodlanmış dizeleri kodlamak nasıl biliyor mu?

4 Cevap

% C3% 83% C2% A9

Bu çok fazla kodlanmış bulunuyor: UTF-8, arka ISO-8859-1, daha sonra onaltılık kodlanmış önce tekrar UTF-8 olarak yazılı olarak okumak gibi dize yazılır!

% E9

O çok az kodlanmış bulunuyor: dize düz ISO-8859-1 ve hex-kodlanmış olarak yazılır. : Konuştuğunuz PHP komut dosyası, ISO-8859-1 bekliyor, ama modern web sistemleri UTF-8 konuşmak gerekir, bu durumda bunu gibi bakmak istiyorum dizisi, bu gayet

% C3% A9

(Bu sadece doğru kodlanmış oluyor!)

Ben klasik ASP Server.URLEncode kullanıyorum

Klasik ASP vardır, ne yazık ki, Unicode işleme bazı ciddi eksiklikler. Sen @ CODEPAGE = 65001 ayarlayabilirsiniz (ve Response.Charset = "UTF-8") UTF-8 sayfaları üretmek için, ama iç string türü hala sistem kod sayfası kodlanmış ve herhangi bir veri formu gönderimler veya veritabanından yakaladı olacak Bu kodlama okunacaktır.

Eğer bir form gönderme UTF-8 kodlanmış 'é' dan verileri alıyoruz Yani, sen 'Ã ©' ile UrlEncode () doğru çıkış OK almak için değişmez bir chr 233, ama bitireceğiz yapabilirsiniz - ISO-8859-1 (aslında CP1252, Windows eşdeğer) olarak yanlış UTF-8 serisi.

Veri döndüren ASP sayfasının başına aşağıdaki ekle

Response.ContentType = "text/html"
Response.AddHeader "Content-Type", "text/html;charset=UTF-8"
Response.CodePage = 65001
Response.CharSet = "UTF-8"

Ne bu konuda?

Function URLEncodeWithCodepage(value, myCodepage)
    Dim cpOriginal
    cpOriginal = Response.Codepage
    Response.Codepage = myCodepage
    URLEncodeWithCodepage = Server.URLEncode(value)
    Response.Codepage = cpOriginal
End Function

Bunu birlikte kullanabilirsiniz

encodedValue = URLEncodeWithCodepage(value, 65001) 

UTF-8 kodlanmış almak için

Bu etrafında bir işti.

JScript (değil VBScript) kodlu yeni bir ASP dosyası oluşturun bir o urlEncodeUTF8.asp çağırır:

<%@ Language="JScript" %>
<%
    Response.CharSet="UTF-8"
    Response.Write(encodeURIComponent(Request("s")))
%>

Ana ASP dosyasında bu kodu yazın:

FUNCTION URLEncodeUTF8(ByVal str)
    URLEncodeUTF8 = ""
    On Error Resume NEXT
    Err.Clear
    postStr = "s=" & Server.URLEncode(str)
    sURL = "http://" & Request.ServerVariables("SERVER_NAME") & "/urlEncodeUTF8.asp"
    SET xmlHTTPObj = CreateObject("MSXML2.ServerXMLHTTP")
    WITH xmlHTTPObj
        .SetTimeouts 2000, 2000, 2000, 5000
        .Open "POST", sURL, false
        .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"
        .SetRequestHeader "Content-Length", Len(postStr)
        .Send postStr
        xmlHttpResponse = .responseText
        IF Err.number=0 AND .Status=200 THEN
            URLEncodeUTF8 = xmlHttpResponse
        END IF
    END WITH    
    SET xmlHTTPObj = NOTHING
    On Error Goto 0
END FUNCTION

Şimdi yukarıdaki işlevini kullanarak dize UrlEncode yapabilirsiniz:

Response.Write(URLEncodeUTF8("é"))

Bu durumda, sonuç olacaktır:

%C3%A9