Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Problemi con le querystring

    Innanzi tutto saluto tutti.
    Inizio a dirvi che ovviamente sono un neofita che proviene da vb6 e si stà approcciando proprio a asp.net, vi descrivo l'applicazione realizzata in poche parole.... ho un oggetto ocx che ha delle proprietà e dei metodi che mi permette di inviare sms, per far ciò accede ad una sezione del nostro sito (asp.net) che riceve i parametri ed invia gli sms. Le chiamate da vb6 ad asp.net sono tutte fatte in modalità GET. Ho provveduto a codificare tutte le stringhe inviate cin modo da sostituire i caratteri speciali tra cui le accentate con % ed il loro valore esadecimale della tabella ascii... da subito mi sono accorto che se chiamavo:

    http://miosito/default.aspx?testo=questa+%e8+una+prova

    su visual studio 2008

    Request.Querystring("testo") mi visualizzava

    "questa � una prova"

    se facevo UrlDecode(Request.QueryString("testo")) mi dava la stessa cosa

    "questa � una prova"

    Allora leggendo in giro ho letto che la codifica utilizzata di default da VS2008 è l'UTF-8 quindi la "è" si codifica con "%c3%a8".... per cui richiamo la pagina con

    http://miosito/default.aspx?testo=qu...3%a8+una+prova

    ed alla richiesta di Request.Querystring("testo") mi restituisce

    "questa è una prova"

    Ora fin qui tutto ok, anzi no, perchè la querystring è già decodificata?

    se controllo il valore di Request.RawUrl ottengo testo=questa+%c3%a8+una+prova
    Quindi Request.QueryString("testo") doveva restiuirmi:

    questa+%c3%a8+una+prova

    mentre invece UrlDecode(Request.QueryString("testo")) il valore decodificato

    questa è una prova

    Mi piacerebbe capire le ragioni di questo comportamento, e magari dove poter modificare il charset da UTF-8 in altro.... Ho provato a mettere nelle pagine session.codepage = 1252 o altro ma non cambia nulla, così come aggiungere il tag:
    <meta http-equiv="Content-Type" content="text/html; charset=1252" />

    Ma anche questo non ha efficacia sulla codifica, l'unico modo per specificare il tipo di codifica è usare:

    urldecode("%e8",Encoding.GetEncoding(1252)) allora ottengo una "è".

    solo che se chiamo la pagina con

    http://miosito/default.aspx?testo=%e8

    e faccio:

    urldecode(request.QueryString("testo"),Encoding.Ge tEncoding(1252))

    putroppo ottengo "�" perchè è già attiva "la codifica UTF-8 automatica" che anticipa tutto.... almeno sembrerebbe......

    Tra l'altro sono giorni che googolo ma non sono riuscito a venirne a capo..... se non modificare l'oggetto ocx vb6 facendo una codifica UTF-8 delle varie get..... solo che è un aggirare il problema anziché risolverlo.
    Dimenticavo il framework è il 3.5.

  2. #2
    Ciao,

    ma esattamente il tuo abbiettivo qual'è?
    Davide

  3. #3
    Quello di prelevare dei dati da una chiamata GET. In modo corretto e senza introdurre errori. Se un utente vuole mandare il messaggio "Questa è un prova" io devo poter avere il testo corretto.

    Se chiamo: www.miosito.it?testo=Questa+%e8+una+prova

    purtroppo in asp.net se faccio:

    dim testo as string

    testo = urldecode(request.querystring("testo")

    o

    testo =request.querystring("testo")

    Non solo ottengo lo stesso risultato ma non ho il mio testo!

    Tra l'altro questo problema permane anche se il dato viene passato in modalità POST.

    il risultato di:

    testo = request.form.item("testo") è lo stesso di

    testo = urldecode(request.form.item("testo"))

    medesimo problema.

  4. #4
    Ciao,
    ok, però non riesco a capire quale sia il "testo corretto" per te.

    Se tu passi "Questa+%e8+una+prova" quale valore vorresti ottenere da Request.Querystring?

    Un'altra domanda. Come fai a generare la chiamata GET? Dal tuo OCX o da un altro applicativo?
    Davide

  5. #5
    Boh forse mi spiego male, allora la chiamata la faccio in modalità get, che può essere digitando direttamente l'url "http://localhostorta/miosito/Default.aspx?testo=Questa+%e8+una+prova" oppure se sono su vb6 ed uso un controllo inet userò la sintassi:

    Inet1.OpenUrl "http://localhostorta/miosito/Default.aspx?testo=Questa+%e8+una+prova"

    mi aspetto che:

    Request.Querystring("testo")

    mi restituisca "Questa+%e8+una+prova"

    e che UrlDecode(Request.Querystring("testo"))

    mi restituisca "Questa è una prova"

    E' chiaro che sono degli esempi nel mio applicativo invio molti più parametri che mi servono per altro. Però rende bene l'idea la query string viene già decodificata prima di fare la decodifica.

  6. #6
    potresti banalmente usare HttpUtility.UrlEncode(Request.Querystring["testo"]) per codificare il parametro..
    Davide

  7. #7
    Ma la codifica è esterna, in quanto l'applicazione è passiva, riceve dati non li trasmette, tra l'altro se verifico

    Request.RawUrl il suo valore è corretto in "/Prova ASP.NET/Default.aspx?testo=Questa+%E8+una+prova"

  8. #8
    scusa ma non ho capito.

    Se ti serve il parametro codificato nella pagina ASP.NET, basta che lo prendi (in chiaro) e lo ricodifichi di nuovo..

    Quindi, se nella mia pagina ASP.NET:

    Request.Querystring["testo"] restituirà il valore "Questa è una prova"

    Allora

    HttpUtility.UrlEncode(Request.Querystring["testo"]) restituirà il valore "Questa+%e8+una+prova"
    Davide

  9. #9
    Ok. ti posto questo codice:
    codice:
    Imports System.Web.HttpUtility
    
    Partial Public Class _Default
        Inherits System.Web.UI.Page
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim testo As String
    
            testo = Request.QueryString("testo")
    
            Response.Write("querystring: " & testo & "</br>")
            Response.Write("Urldecode: " & UrlDecode(testo) & "</br>")
    
        End Sub
    End Class
    Allora l'applicazione deve memorizzare il testo passato, per cui io posso passargli qualunque testo, l'applicazione asp riceve il testo da una chiamata esterna fatta da vb6 per cui su vb6 nn ho nessuna funzione di codifica o decodifica devo farla io e l'ho già fatta.
    Se ti chiedessi di fare una chiamata get a questa pagina passando il testo "prova di invio" tu mi chiameresti la pagina con un ?testo=prova+di+invio giusto?
    Se uso questa stringa funzionicchia perchè non uso caratteri accentati, però ti chiedo come è possibile che con o senza urldecode ottengo lo stesso testo? E' qui il problema. Problema che rimane con l'accentate perchè la codifica è UTF-8 anzichè UNICODE 1252. Cioè tornando all'esempio di prima se chiamassi la pagina con un ?testo=questa+%c3%a8+una prova allora in questo caso la variabile testo avrebbe il valore corretto, continua ad esserci lo strano comportamento che la urldecode nn funziona.
    Aggiungo che è questo il mio problema la urldecode che non entra in funzione (il testo è già codificato) e che nn riesco a cambiare la decodifica di default.

  10. #10
    Ma hai provato come ti ho indicato io?
    Cosa restituisce?
    Davide

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.