2011-09-02 26 views
15

Sto sviluppando uno script di selezione dipendente usando jQuery, PHP e JSON come risposta.json con caratteri speciali come é

Tutto va bene tranne che per l'utilizzo di caratteri speciali come quelli francesi (é, è, à ...)

se li pre-codificare simile (& eacute;, & egrave;, & agrave;) (Qui sto usando degli spazi tra la e commerciale e il resto della parola per evitare la codifica automatica nella mia domanda) funziona ma quando viene eseguito il rendering con jquery i caratteri non vengono convertiti in ciò che dovrebbero apparire (é ...), invece sono mostrate come è (& eacute;)

Se li scrivere come (e) e non pre-codificare loro il pieno valore in questa voce array è n ot mostrato.

Cosa devo fare qui?

Grazie.

+1

Di solito non c'è bisogno di entitize roba poiché jQuery fa per voi. – NullUserException

+1

@NullUserException: È * not * jQuery che "autorizza le tue cose". Non è neanche affatto autorizzato. – Tomalak

+0

@Tomalak Hmmm ... Mi riferisco a '.text()', che converte alcuni caratteri nei loro equivalenti di entità HTML (tramite 'createTextNode()') – NullUserException

risposta

6

Proprio come la prima anwser

Non si utilizza un database? Se Sì, assicurati che la tabella del database sia dichiarata UFT8 Come viene dichiarata la pagina HTML? UTF-8 È la stringa nel file di script PHP? Se sì, assicurarsi che il file ha un formato di file UTF-8

Si potrebbe anche usare utf8_encode (per inviare in HTML) e utf8_decode (ricevere), ma non nel modo giusto

+0

ora ha funzionato :) grazie. – medk

7

Se li scrivo come (é) e non li pre-codifico il valore completo in questa voce di matrice non viene mostrata.

Cosa devo fare qui?

In JSON non si codificano i valori HTML. Si invia loro letteralmente (e) e set set Content-Type correttamente:

header('Content-Type: application/json; Charset=UTF-8'); 

dichiarare la codifica i dati sono in, ovviamente.

+0

ok Ho appena aggiunto questa intestazione prima di json_encode() nel file che invierà la risposta json e provato in entrambi i modi (é ed & eacute) ma ancora lo stesso problema – medk

+0

@medk: Prima di tutto: smetti di provare con '& eacute'.Non hai a che fare con HTML qui, quindi questo non ha nulla a che fare con il tuo problema * affatto *. Hai appena provato quell'intestazione non modificata o hai usato la vera codifica dei tuoi dati? – Tomalak

+0

sì, ho impostato esplicitamente la codifica su utf-8 in firefox per la pagina che mostra i risultati e ho provato una risposta che contiene i due tipi (normale e codificata), la normale non mostra mai e gli spettacoli pre-codificati così com'è, quindi sempre lo stesso problema – medk

2

Questo ha funzionato per me, si spera funzionerà per chiunque altro abbia problemi simili.

$title = 'é'; 
$title = mb_convert_encoding($title, "UTF-8", "HTML-ENTITIES"); 

header('Content-Type: application/json; Charset="UTF-8"'); 
echo json_encode(array('title' => $title)); 

La funzione mb_convert_encoding assume un valore e converte da (in questo caso) HTML-entità UTF-8.

Vedi qui per me i dettagli sulla funzione http://php.net/manual/en/function.mb-convert-encoding.php

+0

Ti rock !! Ha funzionato per me durante la conversione da MySQL utf.8 a Firebase utilizzando una libreria PHP. –