Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 29
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    passare caratteri accentati via get

    la pagina a contiene un iframe ed un TextBox (input type text).

    Alla pressione di un pulsante, modifico la proprietà src dell'iframe aggiungendo pure il testo dentro il textbox

    document.getElementById("iframe1").src = "b.aspx?TextBox1=" + escape(document.getElementById("TextBox1").value);

    la pagina b, recupera il testo ricevuto e lo scrive nella pagina:
    this.Response.Write(this.Server.UrlDecode(this.Req uest.QueryString["TextBox1"] ));
    Response.End();

    il problema, non so se di natura server o client , è che non mi accetta le lettere accentate:

    ho risolto in parte con la funzione javascript che fa:
    function refresh_iframe()
    {

    var a = escape(document.getElementById("TextBox1").value);
    a = a.replace(/%E0/g, "%c3%a0");
    a = a.replace(/%F2/g, "%c3%b2");
    a = a.replace(/%F9/g, "%c3%b9");
    a = a.replace(/%E8/g, "%c3%a8");
    a = a.replace(/%E9/g, "%c3%a9");
    a = a.replace(/%EC/g, "%c3%ac");

    document.getElementById("iframe1").src = "b.aspx?TextBox1=" + a;
    }

    e mi chiedevo se non ci fosse un modo meno pedestre per risolvere la questione

    ciao
    Pietro

  2. #2
    l'unico modo corretto per inviare qualcosa in get (o post con ajax) da JavaScript ad un altro linguaggio è encodeURIComponent, che in accoppiata con decodeURIComponent permette di non avere problemi di questo tipo con nessun carattere unicode (65.000 e rotti caratteri)

    escape ed unescape vanno bene solo per interazioni molto semplici ma sono un modo errato di scambiare dati (e porca paletta a me e a quando non l'ho scritto nella guida).



    [edit]
    per l'esattezza: 65536 (2^16) , range esteso di ASCII (2^8) mentre escape dal carattere 255 in poi invece di encodare scrive una porcheria tipo %u0100 , inutile a tutti i linguaggi se non alla funzione unescape di JavaScript stesso.
    Inoltre escape non encoda nemmeno altri caratteri ... tipo il "+", sempre visto come "spazio" e mai come carattere "+". encodeURI e decodeURI non encodano altri caratteri che encodeURIComponent encoda regolarmente.
    Per avere queste funzioni disponibili da IE4 in su, se interessa la retrocompatibilità e dato che encodeURIComponent mi sembra non ci sia nemmeno in IE 5.5, potete usare la JSL
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    proprio non lo sapevo

    comunque, al posto di mettere tanta robaccia come intestazione del forum, perchè non aggiungere un link ai tuoi articoli?

    ciao e ancora grazie
    Pietro

  4. #4
    purtroppo per questa cosa non ho scritto niente se non qui nel forum stesso ogni volta che la gente aveva problemi di questo tipo

    Nella guida Ajax ho commesso l'orribile errore di usare escape per inviare il tutto e l'ho fatto solo ed esclusivamente per non avere problemi di compatibilità con gli esempi proposti ... colpa mia non aver scritto nella guida stessa questa premessa sull'utilizzo di escape, spero di risolvere a breve
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Utente bannato
    Registrato dal
    Jan 2006
    Messaggi
    100
    Ho capito come si passano questi caratteri accentati in get da una pagina all'altra, ma come faccio a passarli d una pagina asp?

    lato server non esiste una funzione decodeURIComponent

    come si fa?
    ma si fa vero?

  6. #6
    asp cosa ?

    .NET o il vecchio ?

    in PHP non devi far niente, le stringhe encodate per url sono automaticamente restituite come stringhe (se con caratteri speciali stringhe utf-8, quindi al limite bisogna usare utf8_decode)

    mi sembra strano IIS non faccia lostesso
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Utente bannato
    Registrato dal
    Jan 2006
    Messaggi
    100
    asp vbscript

    tra l'altro devo usare il parametro passato via get nel Like di una query sql, quindi è importantissimo che il valore immesso e quello letto dalla pagina asp siano identici

  8. #8
    salva il valore in un file di testo, per fare una prova, e vedi se "i caratteri %FF" vengono stampati così o come testo normale (cosa che presumo ... dato che se scrivo un indirizzo con spazi o altro IIS di solito fa encode e decode in automatico di questi caratteri o delle query strings)
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #9
    Utente bannato
    Registrato dal
    Jan 2006
    Messaggi
    100
    :S

    mi sono accorto che succede una cosa strana
    ho provato a visualizzare il valore grezzo che riceve la pagina asp, e sembra ricevere la cosa giusta, ad esempio "/" o "è"

    solo che se nel database c'è un record contenente la parola "fefè" se io cerco "fè" non lo trova, ma se in serisco "fe" si :berto:

    se cerco direttamente "è" non trova niente, ma se cerco "e" mi trova anche le parole con la e accentata

    in pratica credo che iis non abbia ancora fatto pace con encodeURIComponent

    boh

  10. #10
    se scrivi a mano queste ricerche, usando è , fè e gli altri ... hai risultati diversi (corretti) ?

    Se si, è la codifica usata dal db e non encodeURIComponent
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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 © 2025 vBulletin Solutions, Inc. All rights reserved.