Say PHP invia un testo a MySQL da memorizzare, qualcosa come
INSERT INTO `some_table` ("foo") VALUES
('The quick brown fox jumps over the lazy dog');
L'intento fondamentale di questa query è ovviamente quello di dire a MySQL per memorizzare la stringa The quick brown fox jumps over the lazy dog nel database.
Se PHP è configurato per utilizzare UTF-8, significa che quando converte i caratteri leggibili da umani in binari - per trasmetterlo a MySQL - convertirà i caratteri utilizzando il sistema di codifica UTF-8.
MySQL è in grado di leggere caratteri codificati in UTF-8 e quindi non ha problemi a capire che la sequenza codificata digitalmente è intesa per significare T
e h
e e
ecc. In caratteri leggibili dall'uomo.
Se MySQL è configurato per memorizzare i dati nella tabella some_table
utilizzando latin1, quando riceve la stringa, sarà convertire i caratteri dalle loro codifiche UTF-8 agli equivalenti latini1 prima di salvare i dati sul disco rigido.
In questo caso non ci sono problemi - perché i caratteri dell'alfabeto inglese possono essere rappresentati sia da UTF-8 che da Latin1.
Tuttavia, i problemi si verificano se la stringa PHP inviata contiene caratteri che possono essere rappresentati solo da UTF-8 e non da Latin1, ad es. una citazione intelligente “
. Quando MySQL tenta di convertire la smart quote “
in un modulo digitale, non sarà in grado di - perché Latin1 non ha letteralmente codifica digitale definita per rappresentare “
.
Non sono sicuro di quale sia l'esatto processo di gestione degli errori di MySQL quando incontra questa situazione e se la situazione è recuperabile, ma generalmente il risultato finale è che la codifica sottostante sarà danneggiata e inutilizzabile.
Perché questo problema si verifica solo per quei caratteri che non possono essere rappresentati dai due sistemi - e se il 99% di tutte le comunicazioni coinvolge caratteri inglesi, potresti non notare un problema per un po 'e anche allora sarà solo occasionale carattere, ma cercando di recuperare quando si notano i problemi potrebbe essere frustrante.
fonte
2015-12-25 11:55:38
Così tanti. La maggior parte delle lingue straniere. Se sei interessato a leggere questo http://htmlpurifier.org/docs/enduser-utf8.html#whyutf8 – devpro