2011-12-02 8 views
17

Ho spostato il mio sito Web dal mio server di test locale a NameCheap hosting condiviso e ora sto incontrando un problema - alcune pagine non mostrano correttamente i caratteri speciali di utf-8 (mostrando la domanda segna invece). Tutte le pagine sono codificate utf-8, come tutte le tabelle del database. La cosa strana è che alcune pagine vengono visualizzate correttamente e altre no, in uno schema apparentemente casuale.utf-8 caratteri speciali non visualizzati

Per esempio, la mia pagina indice va bene, ma la mia pagina profilo non lo è. faq.html funziona bene, ma quando lo rinominò in faq.php no. E più strano di tutti, ho una pagina con due schede JQuery in cui una viene visualizzata correttamente e l'altra no!

Qualcuno può aiutarmi con questo?

+1

hai controllato la codifica con Strumenti di sviluppo? (F12 nella maggior parte dei browser) –

+0

Sì, dice che è utf-8 per tutte le pagine. – robert

risposta

42

Questo problema è davvero fastidioso da risolvere ma è possibile provare questi.

Prima di tutto, assicurarsi che il file sia effettivamente salvato nel formato UTF-8.

Quindi verificare di avere <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> nell'intestazione HTML.

Puoi anche provare a chiamare header('Content-Type: text/html; charset=utf-8'); all'inizio dello script PHP o aggiungere AddDefaultCharset UTF-8 al tuo file .htaccess.

+1

Ho il meta tag che specifica charset = utf-8 nella mia intestazione. L'aggiunta di AddDeafultCHarset UTF-8 al mio .htaccess non aiuta. Preferisco evitare la soluzione direttamente dal codice PHP in quanto è un sito piuttosto complesso. – robert

+4

In genere il mio problema era che i file effettivi non erano in formato UTF-8. Ad esempio il carattere 'ä' di ASCII mostrerà come' ' se il browser lo legge come UTF-8 ma il file non lo è. – RCE

+0

I file reali sono decisamente utf-8, e hanno funzionato perfettamente sul mio EasyPHP. – robert

6

Sembra che se si richiede faq.html il server Web segnala al browser che il file è in codifica UTF-8.

Verificare che con il browser che la codifica è annunciata e utilizzata, consultare la documentazione del proprio browser su come farlo. Ogni browser ha questo, più spesso accessibile tramite il menu (per specificare la preferenza su quale codifica del sito web deve essere utilizzata) e per vedere cosa ha restituito il server, spesso lo trovi nelle proprietà della pagina.

Poi suona come che se si richiede faq.php il webserver singals il browser che il file è in qualche altra codifica. Probabilmente nessun charset/codifica è dato come impostazione predefinita di configurazione PHP. Come è un file PHP si può più spesso risolvere questo problema modificando la configurazione di PHP default_charsetDocs direttiva:

default_charset = "UTF-8" 

individuare il php.ini sull'host e modificarlo di conseguenza.

Se non si dispone del php.ini a disposizione, è possibile modificare questo per codice e utilizzando la funzione ini_setDocs:

ini_set('default_charset', 'UTF-8'); 

Fare attenzione che si modifica questo molto presto nello script perché PHP deve essere in grado di inviare intestazioni per farlo funzionare e le intestazioni non possono più essere impostate se sono già state inviate.

inviare manualmente il lavoro Content-Type intestazione-line fa anche:

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

Inoltre è buona pratica che tutte le pagine HTML in uscita hanno questa intestazione, nonché nella loro sezione HTML <head>:

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

Spero che questo sia utile.

+0

Grazie, ma non ho php.ini disponibile. Il browser dice che la codifica è utf-8 e visualizza lo stesso in tutti i browser. Ho la codifica corretta dichiarata nella mia intestazione. Ho provato ad aggiungerlo a .htaccess comunque, ma questo non ha fatto nulla.Pensi che potrebbe essere un problema con l'account di hosting in qualche modo? – robert

+0

Usando ini_set visualizza i caratteri ma non legge alcun contenuto PHP! – robert

+0

Se il browser segnala UTF-8 e non viene visualizzato correttamente, i dati vengono interrotti da qualche parte. La codifica è come una catena, se un elemento è sbagliato, il risultato finale è sbagliato. Abbi cura di te e trova l'elemento della catena che non funziona. E cosa intendi con "qualsiasi contenuto PHP"? – hakre

3

set meta tag in testa come

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

utilizzare il link http://www.i18nqa.com/debug/utf8-debug.html per sostituire il carattere simboli che si desidera.

quindi utilizzare str_replace come

$find = array('“', '’', '…', '—', '–', '‘', 'é', 'Â', '•', 'Ëœ', 'â€'); // en dash 
         $replace = array('“', '’', '…', '—', '–', '‘', 'é', '', '•', '˜', '”'); 
$content = str_replace($find, $replace, $content); 

Suo il metodo che uso e aiutare molto. Grazie!

0

Se tutte le altre risposte non hanno funzionato, provare disabilitare la traduzione di codifica dell'input HTTP.

Questa è un'impostazione relativa all'estensione PHP mbstring. Questo era il problema nel mio caso. Questa impostazione è stata abilitata per impostazione predefinita nel mio server.

2

Se si utilizza PHP e nessuno dei precedenti ha funzionato (come nel mio caso), è necessario impostare le impostazioni internazionali con la codifica utf-8.

Ti piace questa

setlocale(LC_ALL, 'fr_CA.utf-8'); 
1

Il problema è perché il file non sono con la stessa codifica. In primo luogo eseguire il seguente comando in tutti i tuoi file:

file -i filename.* 

Al fine di risolvere il problema è necessario cambiare tutti i file di UFT-8. Si può fare con il comando iconv:

iconv -f fromcode -t tocode filename > newfilename 

Esempio:

iconv -f iso-8859-1 -t utf-8 index.html > fixed/index.html 

Dopo questo è possibile eseguire il file -i fixedx/index.html e vedrete che il file è ora in uft- 8