2009-11-10 9 views
17

ho spostato dati da MySQL 4 (erano stati originariamente impostati latin2 encoding) per MySQL 5 e impostare codifica utf-8. Sembra buono in phpMyAdmin e utf-8 va bene. Tuttavia ci sono punti interrogativi al posto di alcuni personaggi sul sito web! Anche la codifica del sito Web è impostata su utf8, quindi non capisco dove si trova il problema.Problema con utf-8 codifica utilizzando PHP + MySQL

PHP e HTML file vengono anche impostati utf8.

Non ho idea ...

+8

Oh, un classico! Come il giorno in cui l'ultima istanza di IE6 è stata cancellata, celebrerò il giorno in cui l'ultimo script PHP verrà spostato su PHP 6. (In questo lontano futuro posso dire ai miei nipoti del mostro ISO-8859 e del suo sidekick chiamato Codepage.) – Boldewyn

+0

mi dispiace ma ho ovviamente provato SET NAMES 'utf8' .. sul database, non ha aiutato. :( – Adriana

+1

Bene, devi eseguire quella query ogni volta che lo script si connette al database prima di eseguire altre query ... – Franz

risposta

28

interrogazione prova

SET NAMES utf8 

prima di qualsiasi richiesta nell'applicazione

+0

non necessario .L'impostazione della codifica db su utf8 e senza usare 'SET NAMES' funziona correttamente per la mia applicazione. – mauris

+0

Sì, il problema più comune. Controlla la codifica del client o impostalo con il comando SQL Valya già pubblicato. È sufficiente aggiungerlo prima di ogni blocco di istruzioni che si inviano contemporaneamente. –

+0

@Mauris, naturalmente, la tua strada è migliore e più veloce, ma la mia è la soluzione più semplice che può essere raggiunta in ogni lingua e ambiente senza rtfm :) –

3

Non è necessario impostare i file PHP e HTML per utf-8 .

Devi solo impostare la codifica di output su UTF-8 e il browser verrà visualizzato in modo appropriato.

In HTML:

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

In PHP:

header('Content-Type: text/html; charset=UTF-8'); 

Quando si ottiene una stringa che è UTF-8 dalla tabella di MySQL, sarà UTF-8 fino al browser output a meno che non si converta la codifica. È il modo in cui il browser lo interpreta.

+1

Se si memorizzano caratteri speciali negli script PHP, assicurarsi che gli script siano codificati in UTF-8 o che non vengano visualizzati correttamente. Alcuni IDE fanno questo automaticamente ed è un requisito –

13

Provare a impostare la connessione MySQL in UTF-8:

SET NAMES 'utf8' 

E inviare espliciti UTF-8 intestazioni, nel caso in cui il server dispone di alcune altre impostazioni predefinite:

header('Content-type: text/html; charset=utf-8'); 
0

ho avuto questo problema di recente (spero sia lo stesso problema che si sta avendo), ho provato molti modi ma alla fine quello che ha funzionato è stato davvero semplice.

Convertire il file SQL scaricato in formato UTF-8 e quindi importarlo.

BW: ho usato Notepad ++ per la conversione.

2

caricare il file .htaccess nella root del vostro sito web con contenuti: AddDefaultCharset UTF-8

e

nel vostro dbconfig set dopo il collegamento al db:

mysql_query ("impostare i nomi ' utf8' ");

2

Ecco una correzione. Imposta l'intestazione su header ('Content-type: text/html; charset=utf-8'); Quindi stampa il contenuto utilizzando utf8_decode($content). Devi avere i due per farlo funzionare.

+0

sei sicuro di non voler dire 'utf8_encode'? Perché è quello che finalmente lo ha risolto per me. –

19

Sul mio server, l'aggiunta di questi per il mio file php non ha avuto effetto:

ini_set('default_charset','utf-8'); 
mysql_set_charset('utf8'); 
header('Content-type: text/html; charset=utf-8'); 

Ma tutto ha funzionato perfettamente, una volta ho aggiunto questo alla parte superiore del mio file php:

$mysqli->query("SET NAMES 'utf8'"); 

Nota: Sto usando la codifica utf8_general_ci nel mio database, ma lo utf8_unicode_ci funziona allo stesso modo per me.

Spero che questo aiuti.

+0

dove posso scriverlo? –

+1

scrivilo sopra il tuo file index.php –

+0

Ho appena modificato la mia risposta per rendere più chiaro che queste modifiche sono state apportate al tuo file php. –

1

Quando si mostrano caratteri UTF8 su un sito web, ma dire al browser di interpretarli come Latin1 (o latino2) si vede questo tipo di parole senza senso: ß

Quando si mostra Latin1 (o latino2) caratteri su un sito web, ma chiedi al browser di interpretarli come UTF8, vedi punti interrogativi.

Quindi la mia ipotesi è che tu abbia cambiato tutto in UTF8 (voglio dire, hai detto al DB Engine, al web server e al browser che useresti UTF8), ma in realtà non hai convertito le stringhe in UTF8.

Fai come ha detto @Darkerstar. Converti il ​​dump in UTF8 (Notepad ++ può farlo facilmente) e importalo di nuovo.

+0

So che questa è una vecchia domanda. Ho risposto per il bene di quelli che arrivano qui con lo stesso problema. –

2
mysql_query("SET NAMES UTF8"); 

aggiungendo questa riga alla fine della mia "connection.php" risolto il mio problema. codice completo

mio di file di connessione è:

<?php 
# FileName="Connection_php_mysql.htm" 
# Type="MYSQL" 
# HTTP="true" 
$hostname_test = "localhost"; 
$database_test = "test"; 
$username_test = "username"; 
$password_test = "password"; 
$test = mysql_pconnect($hostname_test, $username_test, $password_test) or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_query("SET NAMES UTF8"); 
?> 

mio confronto del database è "utf8_general_ci".

Le pagine sono "dreamweaver default utf8" e "unicode normalization form = C (Decomposizione canonica)".

+0

funziona. mi hai salvato, grazie mille. –

1

Non sembra impostare ogni database, tabella e campo SQL su UTF-8 in MySQL ed è abbastanza buono. Molto noioso.

ha finito per costringere il problema di risolvere i problemi di codifica:

dovuto usare questo Ogni luogo apro il database: $ db-> set_charset ("utf8");

E quello ha funzionato. Finalmente.