Problemi con urlencode()

di il
1 risposte

Problemi con urlencode()

Ciao a tutti! Sto realizzando un progetto da portare all'esame (sono uno studente di ingegneria informatica). Faccio una piccola premessa per introdurre il problema: ho creato una classe con i suoi vari metodi e attributi. Uno tra questi, è l'attributo $name. Il suo valore è preso da una textbox proveniente dalla pagina che avvia il programma (<input type="text" id="textURL" name="textURL">) che si trova all'interno di un form che ha come attributo method="post". Ora si presenta il mio problema: mi servirebbe convertire tale valore in una stringa formattata utf-8 e girovagando nel web ho scoperto la funzione predefinita "urlencode". Utlizzandola però non ottengo il risultato sperato: inserendo infatti la stringa "Legolas nella textbox e avviando il programma (echo urlencode($name);), ottengo "%26%23321%3Begolas" (la stringa corretta sarebbe "%C5%81egolas") mentre il mio programma restituisce "%26%23321%3Begolas". Se provo invece questa semplice riga di comando echo urlencode("Legolas"); che ho utilizzato per verificare il corretto funzionamento di urlencode()) mi dà il risultato corretto. Sembrerebbe ci siano problemi di interazione con la classe. Qualcuno saprebbe aiutarmi? Grazie mille

1 Risposte

  • Re: Problemi con urlencode()

    Devi inserire UTF-8 in "markup" html, il browser "dovrebbe" scrivere e inviare i dati in UTF-8 codificati ma essenzialmente quando recuperi i valori REQUEST, GET, POST, COOKIE (aggiungi $_ ecco i nomi dei superglobali php) vengono auto decodificati quindi se usi urlencode ogni sequenza % che non sia seguita da due cifre esadecimali non è un valore valido (un pre check per garantire che sia valido sin dall'origine e eventualmente convertire la codifica x in UTF-8) significa se uno script scritto erroneamente ignora la codifica url e invia %ciao la funzione urlencode la fa diventare %25ciao.
    È probabile che il tuo php sia impostato con content type ISO-8859-1.. si raccomanda di utilizzare almeno php 7.3.
    Come vedi l'argomento è abbastanza difficile poiché la natura di html ergo derivato di SGML usa standard solo nella propria rfc.
    <meta charset="utf-8">
    PHP
    header('Content-type: text/html; charset=utf-8');
    https://www.php.net/manual/en/ini.core.php#ini.default-charset
    Funzione per codificare una stringa ISO-8859-1 (ovviamente valida) verso UTF-8 https://www.php.net/manual/en/function.utf8-encode.ph

    Controlla L'origine di POST grezzo "non si può
    utilizzare con enctype="multipart/form-data per inteso quando non invia coppie di nome=valore seguiti da una e commerciale se è presente più di una" https://www.php.net/manual/en/wrappers.php.ph
    %26%23321%3b significa &#321; entità HTML decimale L.
    Il web server, proxy e il database può usare regole diverse per l'enconding, lo scrivo per promemoria e sarà tua cura approfondire.
Devi accedere o registrarti per scrivere nel forum
1 risposte