2012-10-05 6 views
6

Sto analizzando alcuni dati utilizzando PHP e inserendolo in MySQL. Ma se i dati contengono caratteri speciali come êm-Khê MySQL è l'output seguente errore:Come analizzare caratteri speciali con PHP in MySQL?

SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xEAm-Kh\xEA...' 

Dopo i test, MySQL non è il problema. (La tabella e la colonna Fascicolazione sono utf8_general_ci) Quando I INSERISCE che le stringhe êm-Khê nella tabella DIRECTLY (manualmente), si inserisce esso. Quindi MySQL può accettare quei dati.

Quindi qualche idea del motivo per cui sta avendo questo errore a livello PHP?

Non capisco e ho molto bene la conoscenza della codifica.

  • Perché è ê trasformato in \xEA nella query?

Così, quando ottengo i dati come ê, come posso mettere nel database in quanto è ê invariato?

+1

È possibile pubblicare il codice che esegue il DB inserto –

+1

[Gestione di Unicode Front To Back in un'applicazione Web] (http://kunststube.net/frontback/). – DCoder

risposta

3

Quindi il problema è che la tua connessione db non è UTF8 ma probabilmente LATIN1 quindi devi usare la funzione PHP utf8_encode() o eseguire SET NAMES utf8 dopo esserti connesso al database.

$handle = new PDO("mysql:host=localhost;dbname=dbname", 
'username', 'password', 
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 

This thread ha alcune buone referenze e spiegazioni

+0

DOP? Scusa, non capisco cosa intendi. Sto usando 'mysql_connect'. Non è così. –

+1

Oh, OK ho capito usando il metodo php 'utf8_encode()'. Grazie x) –

+0

È bene ricordare che dopo 5.3.6 dovresti usare '; charset = utf8' come parte della stringa di connessione. –

0

La mia ipotesi è che ci sia una mancata corrispondenza tra PHP e MySQL. ê non è realmente "trasformato" in \xEA, è solo che MySQL non sa quale sia la sequenza di byte EA e quindi si lamenta solo del fatto che i byte grezzi siano errati. È necessario prima conoscere la codifica delle stringhe in PHP; che dipende da dove provengono. Quindi devi impostare la corretta codifica della connessione MySQL, in modo che MySQL sappia in che cosa consiste la codifica delle stringhe che stai inviando. Come farlo dipende da come ti connetti esattamente al database.

Vedere Handling Unicode Front To Back In A Web App per un riepilogo di tutto il processo.

+0

Ciao, la codifica sorgente della stringa in Php è 'utf-8' e proviene da XML. Voglio dire, l'XML è codificato come 'utf-8'. –

+0

Quindi ricontrollare che si utilizza 'bin2hex' nella query che si sta inviando al database e controllare a cosa è impostata la codifica della connessione. – deceze

-1

è possibile utilizzare questa funzione. mysql_real_escape_string ($ user), mysql_real_escape_string ($ password));