Domanda

Sto ancora imparando le corde con PHP & amp; MySQL e io so che qui sto facendo qualcosa di sbagliato nel modo in cui sono impostati i set di caratteri, ma non riesco proprio a capire leggendo qui e sul web cosa dovrei fare.

Ho un'installazione LAMP standard con PHP 5, MySQL 5. Ho impostato tutto con le impostazioni predefinite. Quando alcuni dei miei utenti inseriscono commenti nel nostro database, alcuni personaggi vengono visualizzati in modo errato, per lo più apostrofi e trattini al momento. In MySQL gli apostrostrophes appaiono come & # 226; & # 8364; & # 8482 ;. Vengono visualizzati anche sulla pagina in questo modo (sto usando htmlentities per generare commenti degli utenti).

In phpMyAdmin dice che il mio set di caratteri MySQL è UTF8-Unicode.

Nel mio database le mie tabelle sono tutte impostate con l'impostazione predefinita Latin1-Swedish-ci.

Le mie pagine web hanno tutte meta http-equiv = " Content-Type " content = " text / html; charset = utf-8 "

Quando guardo le intestazioni http del sito vedo: Content-Type: text / html

Come un principiante, non avevo considerato i set di caratteri fino a quando le cose non hanno iniziato a sembrare strane su alcune delle mie pagine. Quindi ha molto senso convertire tutto in utf-8 e questo influenzerà il mio codice PHP? O dovrei provare a portare tutto in latino? E devo andare nel database e sostituire questi codici dispari, o verranno visualizzati magicamente una volta impostati correttamente i set di caratteri? Tutto il giocherellare che ho fatto finora non ha aiutato (ho impostato le intestazioni http su utf-8 e ho anche provato il latino).

È stato utile?

Soluzione

http://www.phpwact.org/php/i18n/charsets

Quel sito mi ha dato molti buoni consigli su come far funzionare tutto in UTF-8.

Ho anche consigliato di passare da htmlentities a htmlspecialchars in quanto è più compatibile con UTF.

Il punto principale è assicurarsi che tutto parli nella stessa lingua. Il tuo database, la tua connessione al database, il tuo PHP, la tua pagina è in utf8 (dovrebbe avere un meta tag e un'intestazione che lo dice).

Altri suggerimenti

Se vuoi davvero capire questi problemi, vorrei iniziare leggendo questo articolo su mysql.com . Fondamentalmente, vuoi che ogni pezzo del puzzle si aspetti unicode UTF-8. Sul lato PHP, vuoi fare qualcosa del tipo:

<?php header("Content-type: text/html; charset=utf-8");?>
<html>
  <head>
     <meta http-equiv="Content-type" value="text/html; charset=utf-8">

E quando esegui le tue query di inserimento vuoi assicurarti che sia la codifica dei caratteri della tabella che la codifica in cui stai eseguendo le query sia UTF-8. È possibile eseguire quest'ultimo eseguendo la query SET NAMES utf8 prima di eseguire una query di inserimento.

Ci scusiamo per non aver compreso tutte le tue domande. Ma quando una parte della domanda è "UTF-8 o no?", La risposta è: "UTF-8, ovviamente! & Quot;

Sicuramente vuoi sistemare le cose ora piuttosto che dopo. Una delle regole di programmazione più importanti è quella di non andare avanti con una cattiva idea - non scavare in profondità!

Poiché latin1 e utf-8 sono compatibili, puoi convertire le tue tabelle in utf-8 senza manipolare i dati contenuti a mano. MySQL risolverà questa parte per te.

È quindi importante verificare che tutto parli utf-8. Imposta le intestazioni http in apache o usa un meta tag - questo dice a un browser che l'output HTML è utf-8.

Con questo in mente, devi assicurarti che tutti i dati che invii siano davvero utf-8! Configura il tuo IDE per salvare i file php / html come utf-8. Infine assicurati che PHP stia usando una connessione utf-8 a MySQL - invia questa query dopo la connessione:

SET NAMES 'utf-8';
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top