Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Problemi con encoding

  1. #1

    Problemi con encoding

    Salve a tutti, ho una stringa con alcuni caratteri latini e altri con dei diacritici. Se provo a stamparla visualizzo tutto correttamente.
    Se provo, invece a fare delle elaborazioni (per esempio stampare ogni singolo carattere) i caratteri con i diacritici (due punti, o altri simboli sopra) non vengono visualizzati.
    La pagina ha l'utf8 encoding e anche il file in cui lavoro è salvato con quella codifica.

    Vi posto il codice:


    codice:
    define("STR_ALPHABET","aäābcdeëfgijĵklmnoöōøprsŝtŧuůvwy");
    
    function viewChar(){
            echo STR_ALPHABET . <br>;
    
            for ($c=0; $c<strlen(STR_ALPHABET);$c++){
            
                echo     $c . " Carattere: " . substr(STR_ALPHABET,$c,1) . " <br>";
            }
    
    }
    Quale può essere il problema?

    edit: ho provato a usare mb_substr() ma il risultato non cambia
    Ultima modifica di Nunkij; 26-07-2014 a 21:36
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    A casa mia. Se metto <meta http-equiv="content-type" content="text/html; charset=utf-8" /> allora non visualizzo quei caratteri e senza li vedo.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Leggi il mio link in firma sui caratteri strani.

  4. #4
    La questione non è l'encoding della pagina. Se stampo direttamente la stringa vedo tutto perfettamente con il metatag specificato (senza, invece no). Se invece faccio elaborazioni selezionando, per esempio, un carattere alla volta non funziona. Come se le funzioni di gestione delle stringhe avessero problemi col charset.

    Ora leggo il link ma qualcuno sa spiegarmi perché c'è questo comportamento diverso nei due casi?
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  5. #5
    Alhazred uso notepad++ il file è salvato in utf8 senza bom ma ho ancora questo problema per ogni stringa che non sia inserita direttamente nel sorgente.

    Se faccio

    codice:
    define("STR_ALPHABET","aäābcdeëfgijĵklmnoöōøprsŝtŧuůvwy");
    
    echo STR_ALPHABET; // FUNZIONA
    
    $strNuova = substr(STR_ALPHABET,1,2); 
    echo $strNuova; // NON FUNZIONA
    
    $strNuova = mb_substr(STR_ALPHABET,1,2); 
    echo $strNuova; // NON FUNZIONA
    
    $strVar = STR_ALPHABET;
    $strNuova = $strVar[1]
    echo $strNuova; // NON FUNZIONA
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Ho appena fatto una prova così e solo l'ultimo echo mi da problemi, gli altri funzionano regolarmente
    Codice PHP:
    <!DOCTYPE html>
    <html lang='it'>
        <head>
            <meta charset="utf-8">
        </head>
        <body>
            <?php
            define
    ("STR_ALPHABET","aäābcdeëfgijĵklmnoöōøprsŝtŧuůvwy");

            echo 
    STR_ALPHABET.'<br />';

            
    $strNuova substr(STR_ALPHABET,1,2); 
            echo 
    $strNuova.'<br />';

            
    $strNuova mb_substr(STR_ALPHABET,1,2); 
            echo 
    $strNuova.'<br />';

            
    $strVar STR_ALPHABET;
            
    $strNuova $strVar[1];
            echo 
    $strNuova;
            
    ?>
        </body>
    </html>

  7. #7
    Ho appena fatto una prova così e solo l'ultimo echo mi da problemi, gli altri funzionano regolarmente
    Ho appena fatto un test con phpStorm e salvato in UTF8, ma vedo correttamente solo il primo

    --EDIT--

    con il codice di Alhazred modificato così vedo correttamente solo 3 caratteri (cioè äāb)
    Codice PHP:
    $strNuova substr(STR_ALPHABET,1,5); 
            echo 
    $strNuova.'<br />'
    Quindi i caratteri diacritici contano come due normali per PHP
    Ultima modifica di endlesszero; 27-07-2014 a 15:40

  8. #8
    Ok quindi io dovrei prendere 1 carattere nei casi senza diacritici e 2 nei casi con. Come faccio questa cosa in un ciclo avendo una serie di parole in cui non posso prevedere se il carattere in posizione n sia del caso 1 o del caso 2?
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  9. #9
    Può essere un problema di caratteri multibyte?
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  10. #10
    Allora sono riuscito a risolvere.
    Basta settare esplicitamente l'encoding usato tramite la funzione mb_internal_encoding();


    codice:
    <!DOCTYPE html>
    <html lang='it'>
        <head>
            <meta charset="utf-8">
        </head>
        <body>
            <?php
            define("STR_ALPHABET","aäābcdeëfgijĵklmnoöōøprsŝtŧuůvwy");
    mb_internal_encoding("UTF-8");
    
            echo STR_ALPHABET.'<br />';
    
            $strNuova = mb_substr(STR_ALPHABET,1,1); 
            echo $strNuova.'<br />';
    
            $strNuova = mb_substr(STR_ALPHABET,1,1); 
            echo $strNuova.'<br />';
    
            $strVar = STR_ALPHABET;
            $strNuova = $strVar[1];
            echo $strNuova;
            ?>
        </body>
    In questo caso ogni carattere viene valutato singolarmente in automatico prendendo uno o due byte. Ciò che non funziona (e questo è un limite dei multibyte a quanto ho letto sul web) è l'accesso diretto tramite array. Ma per fortuna è una cosa a cui si può tranquillamente ovviare.
    Grazie a tutti
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

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.