2010-05-20 17 views
7

Recentemente ho modificato alcune delle mie pagine per essere visualizzate tramite ajax e sto avendo una certa confusione sul motivo per cui la codifica utf8 ora sta visualizzando un punto interrogativo all'interno di una scatola, mentre prima non era t.La codifica UTF8 non funziona quando si usa ajax

Esempio precedente. La pagina oringale era index.php. charset era esplicitamente impostato su utf8 e si trova nello <head>. Allora ho usato php per interrogare il database

Heres è la pagina index.php originale:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
    <title>Title here</title> 
</head> 
<body class='body_bgcolor' > 

<div id="main_container"> 
    <?php 
     Data displayed via php was simply a select statement that output the HTML. 
    ?> 
</div> 

Tuttavia, quando ho fatto il cambiamento di aggiungere un menu che hanno popolato la "main_container" tramite la tecnologia AJAX tutto l'utf8 la codifica ha smesso di funzionare. Ecco il nuovo codice:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> 
    <head> 
     <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
     <title>Title here</title> 
    </head> 
    <body class='body_bgcolor' > 
<a href="#" onclick="display_html('about_us');"> About Us </a> 

    <div id="main_container"></div> 

Il "display_html()" funzione chiama la pagina javascript che utilizza chiamata jquery ajax per recuperare il codice HTML memorizzato all'interno di una pagina php, quindi inserisce il codice HTML all'interno del div con un ID di " main_container". Sto impostando il set di caratteri in jquery per essere utf8 come:

$.ajax({ 
     async: false, 
     type: "GET", 
     url: url, 
     contentType: "charset=utf-8", 
     success: function(data) 
      { 
       $("#main_container").html(data); 
      } 
}); 

Cosa sto facendo male?

+0

penso sia un problema ** ** BOM Byte Order Mark http://www.google.it/search?hl=it&q= + Byte + Order + Mark + (BOM) & aq = f & aqi = & aql = & oq = & gs_rfai = –

risposta

6

La codifica è più che specificare il metatag e il tipo di contenuto: i file stessi devono essere realmente nella codifica specificata, oppure riceverai mojibake.

Verificare che tutto stia utilizzando UTF-8, il database, la connessione al database, le colonne della tabella. Verifica che tutti i file statici inclusi siano anche codificati in UTF-8.

+0

Ok, ho cambiato tutti i miei file inclusi tutti gli include da ANSI a UTF-8. Ho guardato il database, ma non sono sicuro che sto cercando nel posto giusto. Le colonne dicono sotto "COLLATION" "Latin1_swedish_ci" Non sono sicuro di cosa significhi. In quale altro modo posso verificare se le tabelle/colonne db sono utf-8? Inoltre, dopo aver salvato tutti i file in utf-8 ora viene visualizzato un errore "Impossibile inviare il limitatore della cache di sessione - le intestazioni già inviate" 'ma non ho modificato alcun codice tranne il salvataggio del file come utf-8 e tutto ha funzionato prima che io facessi questo ... non so che cosa sta succedendo. Grazie per il tuo aiuto – Ronedog

+0

Come gli altri commenti stanno dicendo, questo riguarda il segno di ordinamento dei byte. Vedi gli altri link da altri poster, e anche http://forum.mamboserver.com/showthread.php?t=42814 – mdma

+0

Ok, ho letto tutti quegli altri post. Fondamentalmente stanno dicendo che c'è uno spazio o un nuovo carattere di linea prima del ' '. Ho passato tutto il mio codice e tutti gli include e ho ancora lo stesso risultato. Ho anche rimosso ogni bit di codice dalla pagina index.php così sembrava: ' '... nessuno spazio prima o dopo ... nessun include altri file che potrebbero influenzarlo Quando ricarico la pagina, ottengo lo stesso messaggio di errore. TUTTAVIA, ho deciso di salvare nuovamente la pagina index.php come ANSI, e l'errore è andato via, ma la codifica non è stata buona ??? – Ronedog

1

Hai scritto

Il "display_html()" funzione chiama pagina javascript che utilizza jquery chiamata ajax per recuperare il codice HTML memorizzata all'interno di una pagina php

Cosa fare intendi con "l'html memorizzato all'interno di una pagina php"? Se si desidera caricare i dati e visualizzarli come contenuto di <div>, i dati caricati devono essere formattati come corrispondenti. Voglio dire che dovrebbe essere un vero frammento di codice di HTML. Inoltre Insieme a "contentType" sarebbe una buona idea specificare "dataType" come "html" o "testo". Se non si specifica nulla, l'ultima versione di jQuery "cercherà in modo intelligente di ottenere i risultati, in base al tipo MIME della risposta". Se conosci il 'dataType', sarebbe meglio specificarlo. E se usi Ajax, usa anche "async: true" e non "false".

È inoltre necessario verificare se il metodo jQuery.load (vedere http://api.jquery.com/load/) è la scelta migliore. È possibile caricare con il mathod una pagina html completa, se necessario, e visualizzarne solo una parte: $('#main_container').load('ajax/about_us.html #container');

E sulla codifica UTF-8 non dimenticare di salvare il file realmente codificato in UTF-8. Usa l'opzione corrispondente del tuo editor (nel Blocco note scegli "Salva come" e poi scegli come codifica "UTF-8" e non "ANSI").

+0

La cosa buona è ricordare l'impostazione dell'editor. – Timo

0

Assicurarsi che tutti i file siano salvati come UTF-8 (o UTF-8 con BOM).

Se li hai caricati tramite FTP o con uno strumento Web, controlla se sono ancora UTF-8.

0

Nel mio caso nessuna delle soluzioni ha lavorato fino a quando ho messo

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