Visualizzazione risultati 1 fino 2 di 2

Discussione: Problema con i codici ascii dei caratteri

  1. #1
    myfuturelab non è connesso Neofita
    Data registrazione
    17-04-2016
    Messaggi
    2

    Post Problema con i codici ascii dei caratteri

    Salve a tutti, sto lavorando ad un progetto per gli esami di codifica/decodifica.
    Il progetto è il seguente:
    ho un form HTML composto da una textarea dove l'utente inserisce il proprio testo in chiaro e da un bottone che invia i dati ad un file php che li elabora.
    Il codice php permette di associare ad ogni carattere contenuto nella textarea il proprio codice ascii e sommare il risultato di ogni conversione ad una variabile separando ogni valore con un "/". Al termine della conversione di tutta la stringa farà visualizzare la variabile che consisterà in una serie di numeri intervallati da un "/".
    il codice è il seguente:
    Codice PHP:
    $testo=$_POST['lettera'];
    $lunghezza=strlen($testo);
    echo
    "lunghezza:".$lunghezza."<br>";
    echo
    $testo;
    $carattere="";
    $cifrato="";
    for(
    $i=0;$i<$lunghezza; $i++){ //INIZIO CICLO DI CIFRATURA CARATTERI IN CODICE ASCII
    $carattere=ord($testo[$i]);
    if (
    $carattere=="195"){ // SE IL CODICE RISULTA 195 ALLORA NON LO DEVE CONSIDERARE E DEVE PASSARE A QUELLO SUCCESSIVO
    $cifrato=$cifrato; // =
    }

    else
    $cifrato=$cifrato.$carattere."/"; //AGGIUNGE AL TESTO CIFRATO IL CODICE DEL CARATTERE ANALIZZATO IN QUESTO CICLO
    print("al carattere: $testo[$i] corrisponde il valore: $carattere - ". chr($carattere)."<br>");
    }
    //FINE CICLO DI CIFRATURA CARATTERI IN CODICE ASCII

    print("<br><br><br><br><br>il testo cifrato &egrave:<br>");
    print(
    "$cifrato<br><br>"); //VISUALIZZAZZIONE TESTO CIFRATO IN CODICE ASCII
    Il problema è che quando nella textarea inserisco i caratteri speciali come "àèìòù" il file php li riceve correttamente ma al momento della codicfica in codice mi da una serie di problemi:

    1)la vera lunghezza della stringa in chiaro aumenta di uno per ogni carattere speciale.
    es. la parola attività è costituita da 8 caratteri ma il file php ne conta 9.
    Il file php ogni volta mi aggiunge il codice 195 prima del carattere speciale, questo codice corrisponde al "+" infatti come potete vedere da codice ho dovuto eliminarlo nella somma finale dei caratteri convertiti.

    2)ad ogni carattere speciale spesso da un valore diverso da quello da me trovato nelle tabelle ascii.
    es. al carattere "à" alcune volte associa il valore "224" (quello secondo me più giusto) altre volte associa il valore "160" che corrisponde al carattere "á".
    Questo è un problema che da a tutti i caratteri àèìòù cioè alcune volte restituisce il valore esatto altre volte restituisce il valore della lettera l'accento opposto.
    I codici che genera sono i seguenti :
    à -> 224 -> 160
    è -> 232 -> 168
    ì -> 236 -> 172
    ò -> 242 -> 178
    ù -> 249 -> 185
    Qualcuno potrebbe aiutarmi a risolvere questo problema? Grazie in anticipo :)
    se avete bisogno posso darvi il sito così verificate voi stessi.

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    L'ASCII è una codifica che usa 7 bit, non comprende le lettere accentate e altri simboli particolari (consulta la tabella che trovi su Wikipedia, è completa).
    Citazione Originalmente inviato da myfuturelab Visualizza messaggio
    1)la vera lunghezza della stringa in chiaro aumenta di uno per ogni carattere speciale.
    es. la parola attività è costituita da 8 caratteri ma il file php ne conta 9.
    Il file php ogni volta mi aggiunge il codice 195 prima del carattere speciale, questo codice corrisponde al "+" infatti come potete vedere da codice ho dovuto eliminarlo nella somma finale dei caratteri convertiti.
    Quello che in PHP viene chiamato stringa è in realtà una semplice sequenza di byte, non di caratteri. E byte e caratteri sono cose ben distinte.
    Nel tuo caso molto probabilmente il browser sta codificando il testo del modulo in UTF-8, una codifica a lunghezza variabile, che codifica cioè i caratteri in sequenze di byte più o meno lunghe, a seconda del carattere.
    La funzione strlen ti permette di contare i byte, per contare i caratteri devi indicare quale codifica stai usando ed usare la funzione mb_strlen.
    Citazione Originalmente inviato da myfuturelab Visualizza messaggio
    2)ad ogni carattere speciale spesso da un valore diverso da quello da me trovato nelle tabelle ascii.
    Come ho scritto prima, quello non è ASCII.
    Citazione Originalmente inviato da myfuturelab Visualizza messaggio
    es. al carattere "à" alcune volte associa il valore "224" (quello secondo me più giusto) altre volte associa il valore "160" che corrisponde al carattere "á".
    In ASCII il carattere à (lettera a minuscola con accento grave) non esiste.
    Nella codifica ISO8859-1 (che è a lunghezza fissa) viene codificato in 0xE0 (esadecimale, 224 decimale).
    Nello standard Unicode è stato mantenuto il medesimo codice (che viene normalmente indicato come U+00E0), ma nella codifica UTF-8 i byte risultanti sono due, in ordine: 0xC3 0xA0.
    http://unicode-table.com/en/00E0/
    Ultima modifica di karl94 : 25-05-2016 alle ore 18.15.58

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •