Visualizzazione dei risultati da 1 a 6 su 6

Discussione: codifica caratteri

Visualizzazione discussione

  1. #6
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    C'è da dire che con la codifica "Western European CP-1252" il problema non si pone in quanto riconosce le accentate (e non so perché)
    Il motivo te l'ho spiegato. CP1252 encoda i caratteri utilizzando un singolo ottetto, al contrario di utf-8.
    Di utf-8 ti basta sapere che è una codifica multibyte e conoscere quelle 3/4 caratteristiche che ha. Quando poi lavori con delle stringhe utf-8 devi sapere cosa stai facendo, altrimenti otterrai dei risultati imprevisti. Un esempio di questo che trovi quasi per primo ovunque è:
    Codice PHP:
    $utf8_string "àbcdèfg";
    echo 
    strlen($utf8_string); // 9, non 7 
    strlen infatti conta i byte, non i caratteri, come si è abituati a pensare. Ecco quindi che ti ritroverai molto spesso ad usare al posto di queste funzioni delle altre che invece considerano l'encoding della stringa.

    In questo caso particolare non serve pensare ad un algoritmo, php ha già una funzione che fa questo lavoro: http://php.net/manual/en/function.substr-count.php
    Questa funzione (come strlen) non ha conoscenza di come la stringa che stai cercando sia codificata, lavora cercando byte, non caratteri. Quello che ti devi quindi chiedere è: con stringhe utf-8 questa funzione lavora correttamente? La risposta è si. Perché una delle caratteristiche di utf-8 è che tutti i caratteri sono codificati utilizzando un insieme unico di ottetti che quindi non sono a loro volta utilizzati per codificare un altro carattere. Non c'è quindi nessuna ambiguità a cercare dei byte (NON caratteri) in una stringa, sapendo che se li trovo è proprio quel carattere, non altro.

    codice:
    $utf8_string = "àbcdèfgàbcdèfg";
    $n = 0;
    foreach (array('è', 'à') as $char) {
        $n += substr_count($utf8_string, $char);
    }
    
    echo "Trovati: ", $n;
    Demo: http://3v4l.org/uodQ7

    Nota che esiste una funzione che fa lo stesso lavoro di substr_count e che considera il set di caratteri utilizzato, http://php.net/manual/en/function.mb-substr-count.php, ma avendo coscenza di cosa è utf-8 puoi anche scegliere di non utilizzarla e di gestire al meglio le tue stringhe. Non andare alla cieca nel trattare stringhe multibyte, mi raccomando.
    Ultima modifica di .Kurt; 01-02-2015 a 13:14

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.