Ricerca…


Osservazioni

  • È necessario assicurarsi che ogni volta che si elabora una stringa UTF-8, lo si fa in modo sicuro. Questa è, sfortunatamente, la parte difficile. Probabilmente vorrai fare un uso estensivo dell'estensione mbstring di PHP.

  • Le operazioni di stringa incorporate di PHP non sono di default UTF-8 sicuro. Ci sono alcune cose che puoi tranquillamente fare con le normali operazioni di stringa PHP (come la concatenazione), ma per la maggior parte delle cose dovresti usare la funzione equivalente mbstring .

Ingresso

  • È necessario verificare ogni stringa ricevuta come UTF-8 valida prima di provare a memorizzarla o utilizzarla ovunque. mb_check_encoding() di PHP fa il trucco, ma devi usarlo in modo coerente. Non c'è davvero alcun modo per aggirare questo problema, poiché i client malevoli possono inviare i dati in qualsiasi codifica che desiderano.

    $string = $_REQUEST['user_comment'];
    if (!mb_check_encoding($string, 'UTF-8')) {
        // the string is not UTF-8, so re-encode it.
        $actualEncoding = mb_detect_encoding($string);
        $string = mb_convert_encoding($string, 'UTF-8', $actualEncoding);
    }
    
  • Se utilizzi HTML5, puoi ignorare quest'ultimo punto. Desideri che tutti i dati inviati dai browser siano in UTF-8. L'unico modo affidabile per farlo è aggiungere l'attributo accept-charset a tutti i tag <form> modo:

    <form action="somepage.php" accept-charset="UTF-8">
    

Produzione

  • Se la tua applicazione trasmette il testo ad altri sistemi, dovranno anche essere informati della codifica dei caratteri. In PHP, è possibile utilizzare l'opzione default_charset in php.ini o manualmente rilasciare l'intestazione MIME Content-Type . Questo è il metodo preferito quando si scelgono i browser moderni.

    header('Content-Type: text/html; charset=utf-8');
    
  • Se non riesci a impostare le intestazioni di risposta, puoi anche impostare la codifica in un documento HTML con metadati HTML .

    • HTML5

      <meta charset="utf-8">
      
    • Versioni precedenti di HTML

      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      

Archiviazione e accesso ai dati

Questo argomento parla specificamente di UTF-8 e considerazioni per l'utilizzo con un database. Se desideri maggiori informazioni sull'utilizzo dei database in PHP, controlla questo argomento .

Memorizzazione di dati in un database MySQL:

  • Specificare il utf8mb4 caratteri utf8mb4 su tutte le tabelle e le colonne di testo nel database. In questo modo MySQL memorizza e recupera fisicamente i valori codificati in modo nativo in UTF-8.

    MySQL utilizzerà implicitamente la codifica utf8mb4 se viene specificato un confronto utf8mb4_* (senza alcun set di caratteri esplicito).

  • Le versioni precedenti di MySQL (<5.5.3) non supportano utf8mb4 quindi sarai costretto a usare utf8 , che supporta solo un sottoinsieme di caratteri Unicode.

Accesso ai dati in un database MySQL:

  • Nel codice dell'applicazione (ad es. PHP), in qualunque metodo di accesso DB si usi, è necessario impostare il set di utf8mb4 connessione su utf8mb4 . In questo modo, MySQL non esegue alcuna conversione dal suo UTF-8 nativo quando trasferisce i dati alla tua applicazione e viceversa.

  • Alcuni driver forniscono il proprio meccanismo per configurare il set di caratteri di connessione, che aggiorna il proprio stato interno e informa MySQL della codifica da utilizzare sulla connessione. Questo è solitamente l'approccio preferito.

    Ad esempio (la stessa considerazione riguardante utf8mb4 / utf8 applica come sopra):

    • Se stai usando il livello di astrazione PDO con PHP ≥ 5.3.6, puoi specificare il charset nel DSN :

      $handle = new PDO('mysql:charset=utf8mb4');
      
    • Se stai usando mysqli , puoi chiamare set_charset() :

      $conn = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
      
      $conn->set_charset('utf8mb4');        // object oriented style
      mysqli_set_charset($conn, 'utf8mb4'); // procedural style
      
    • Se si è bloccati con mysql semplice, ma è possibile eseguire PHP ≥ 5.2.3, è possibile chiamare mysql_set_charset .

      $conn = mysql_connect('localhost', 'my_user', 'my_password');
      
      $conn->set_charset('utf8mb4');       // object oriented style
      mysql_set_charset($conn, 'utf8mb4'); // procedural style
      
    • Se il driver del database non fornisce il proprio meccanismo per impostare il set di caratteri di connessione, potrebbe essere necessario inviare una query per dire a MySQL come l'applicazione si aspetta che i dati sulla connessione siano codificati: SET NAMES 'utf8mb4' .



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow