2009-02-16 22 views
55

Attualmente sto codificando un sito Web francese. C'è una pagina di pianificazione, in cui un link sul lato può essere utilizzato per caricare un programma di un altro giorno.jQuery Codifica caratteri AJAX

Ecco il JS che sto usando per fare questo:

<script type="text/javascript"> 
    function load(y) { 
     $.get(y,function(d) { 
      $("#replace").html(d); 
      mod(); 
     }); 
    } 
    function mod() { 
     $("#dates a").click(function() { 
      y = $(this).attr("href"); 
      load(y); 
      return false; 
     }); 
    } 
    mod(); 
    </script> 

L'attuale AJAX funziona come un fascino. Il mio problema sta nella risposta alla richiesta.

Poiché si tratta di un sito francese, ci sono molte lettere accentate. Sto usando il charset ISO-8859-15 proprio per questo motivo. Tuttavia, nella risposta alla mia richiesta AJAX, gli accenti stanno diventando? Perché la codifica dei caratteri sembra essere tornata a UTF-8.

Come evitare questo? Ho già provato ad aggiungere un po 'di PHP in cima dei documenti richiesti per impostare il set di caratteri:

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?> 

Ma questo non sembra funzionare. qualche idea?

Inoltre, mentre qualcuno di voi stanno cercando qui ... perché la colonna più a destra sembrano diventare più piccolo quando una nuova pagina viene caricata, causando la tabella di distorcere e ogni <li> all'interno del <td> per avvolgere alla riga successiva?

Acclamazioni

risposta

22

si suppone UTF-8 per gestire tutti gli accenti e caratteri stranieri - perché non usarlo sulla vostra fonte di dati?

EDIT
[Archive copy of the test file.] con i tuoi dati

tutto dovrebbe essere UTF-8, in primo luogo. Ho caricato i file nel blocco note ++, convertito in utf-8 e sono stati modificati manualmente i caratteri per gli accenti. Una volta fatto tutto funziona come un fascino.

BTW, a meno che il tuo server non sia definito per i file .html di php-process, i file che stai caricando con ajax non ricevono il tuo charset iso. Se si insiste a utilizzare il charset iso, richiedere un file php invece di un file html e definire il set di caratteri nell'intestazione (non nel file stesso)

+0

non funziona. Ecco la pagina con un UTF-8 charset: http://www.aquate.us/u/7183981145359693722.jpg Come si può vedere, gli accenti sono ancora ottenere macellati. – Salty

+0

Questo non dovrebbe accadere. Qual è la tua fonte di dati? Banca dati? File di testo piatto? – yoavf

+0

Questo non è con l'origine dati, anche se accade la stessa cosa. Questo è se si carica una pagina HTML con accenti su un set di caratteri UTF-8. – Salty

10

È necessario configurare il server per utilizzare ISO-8859- 15 come codifica dei caratteri (aggiungendo l'intestazione HTTP appropriata). Farlo nel corpo del codice HTML non aiuterà.

posso vedere questa linea

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?> 

alla fonte del codice HTML. Questo non dovrebbe accadere. Utilizzo delle intestazioni HTTP in tempo reale Non riesco a vedere l'intestazione HTTP del set di caratteri appropriato. Usalo sia per la tua prima pagina che per il servizio Ajax.

6

Quando si stampano le variabili nel file Ajax. Mettere un

htmlentities() 

Intorno a loro, vedere se funziona. Ha funzionato per me in un'applicazione ajax islandese.

+0

Thanx Ólafur è una soluzione molto semplice che appena funziona! – tvgemert

58

Specificare il tipo di contenuto sulla chiamata AJAX ha risolto i miei problemi su un sito norvegese.

$.ajax({ 
     data: parameters, 
     type: "POST", 
     url: ajax_url, 
     timeout: 20000, 
     contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15", 
     dataType: 'json', 
     success: callback 
}); 

È inoltre necessario specificare il set di caratteri sul server.

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?> 
+1

che è strano, ho dovuto mettere contentType: "application/x-www-form-urlencoded; charset = UTF-8" nella mia chiamata AJAX (con il plugin jQuery modulo) per fissare codifica dei caratteri nelle mie pagine ISO-8859-1/server – jneira

+1

+1 Grazie! Stavo cercando di capire come specificare un tipo di contenuto con l'Ajax, proprio come il ragazzo di cui sopra per passare a UTF-8 e mi u ha dato esattamente quello che mi serviva. – gmustudent

+0

Grazie per questo! Lavorare in un ambiente Python/CGI, l'intestazione ho dovuto fornire sul server è stato il seguente: 'print ("Content-Type: text/html; charset = ISO-8859-15 \ n")' – sc28

0

Ive ha avuto lo stesso problema con le pagine che:

  • Mostra sull'indennità quando viene chiamato normalmente
  • Avere i caratteri speciali incasinato quando viene chiamato tramite una richiesta AJAX

Per risolvere il problema (utilizzando php), ho usato utf8_encode() o htmlentities() sui dati di origine. Entrambi hanno funzionato, li ho usati in diversi progetti.

1

I NON ACCETTO che tutto deve essere UTF-8, è possibile farlo funzionare perfettamente con ISO 8859, l'ho fatto, leggere la mia risposta qui.

my response in stackoverflow

18
$str=iconv("windows-1250","UTF-8",$str); 

quello che mi ha aiutato sul fine

+0

Sei un eroe, questo mi ha aiutato a inviare lettere accentate come é attraverso una richiesta AJAX. –

+0

funziona per me, grazie – Rajaraman

+0

salvato il mio giorno .. Grazie mille ... Questa dovrebbe essere la risposta accettata .. – meen

7

avrei pieno c suggerire l'uso della fuga javascript() metodo

è possibile utilizzare questo con jQuery afferrando un valore modulo così:

var encodedString = escape($("#myFormFieldID").val()); 
+0

questo è ciò che mi ha aiutato con l'ebraico (windows-1255) - grazie! – kneidels

4

Mi stavo divertendo problemi comuni, lavorando in un sistema di commenti sui contenuti nel nostro portale spagnolo. Che finalmente risolto il mio problema, dopo molte ore di ricerca, invece di scherzare con jQuery charset, che sembra usare utf-8 non importa quale, è stato per decodificare da utf-8 a ISO-8859-1 nel PHP che elaborato il POST ajax. In PHP c'è un costruito in funzione, utf8_decode(), quindi la prima cosa che faccio con la stringa commenti è questo:

$comentario = utf8_decode($_POST['comentario']); 

(e poi ho usato nl2br() e htmlentities() funzioni PHP al fine di preparare il testo da memorizzare con entità html invece di caratteri speciali)

Good Luck & Pace dappertutto! Seba

3

Mi è stato giocherellare con questo problema e ho scoperto che questa soluzione funziona per Firefox e Safari (sì, im su un Mac al momento).

quando ottiene la richiesta, ho fatto un tipo di contenuto = iso-8859-1 qui:

if (window.XMLHttpRequest) { // Mozilla, Safari, ... 
    httpRequest = new XMLHttpRequest(); 
     if (httpRequest.overrideMimeType) { 
      httpRequest.overrideMimeType('text/xml; charset=ISO-8859-1'); 
     } 
    } 

prego di dirmi se qualcuno scopre questo non funziona in IE.

0

appena cambiato {"type":"GET"} a {"type":"POST"} e lavorato come un fascino con ISO-8859-1

7

Per la mia applicazione PHP la soluzione è stata includono la funzione utf8_decode per ogni get variabile $_POST.

Ex: (lato server)

if(strtoupper($_SERVER['REQUEST_METHOD']) == "POST"){ 
$variable = htmlentities($_POST['variable']); // wrong 
$variable = htmlentities(utf8_decode($_POST['variable'])); // right 
} 

Abraços !!! (Bye Bye !!!)

+0

Grazie, Rafael! Ho cacciato per secoli provando ogni suggerimento che ho trovato e alla fine questo lo ha risolto per me! utf8_decode era ciò che mancava! Grazie. – BruceHill

+0

Questo risolto il mio problema, come pure - grande per averlo risolto: D – trueheart78

0

Se l'intera applicazione utilizza ISO-8859-1, è possibile modificare le jquery.js sostituzione di tutte le occorrenze di encodeURIComponent da escape (ci sono 2 occorrenze per sostituire nello script jquery corrente - 1.5.1)

Vedi encodeUIComponent e escape per ulteriori informazioni

3

ho avuto un problema simile con ASP con le mie pagine. Ho risolto così:

1) inserito al inizio del file ASP chiamato da Jquery metodo ajax l'istruzione:

Response.Charset = "windows-1252" 

nella mia pagina asp prima che il set di caratteri non è stato definito e avevo salvato il mio file con la codifica ANSI (con un editor di testo come notepad ++)

2) nel file HTML che chiama il file ASP con il metodo jquery ajax ho inserito il contenuto-tipo di parametro che vedete qui sotto:

$.ajax({   
data: parameters,   
type: "POST",   
url: ajax_url, 
datatype: 'html',   
contentType: "text/html;charset=windows-1252", 

In breve, è importante definire nel file ASP chiamato charset. Stranamente, vedo che il mio jQuery funziona con Windows-1252 ma non funziona con il set di caratteri ISO-8859-1: in questo caso il metodo jquery ajax fornisce un'eccezione.

1
<script type="text/javascript"> 
    function GetContent(idUser){ 
    $.ajaxSetup({ 
     url: 'ping.php' 
    }); 

    $.ajax({ 
     type: "POST", 
     url: "blablabla.php", 
     dataType: "text", 
     data: ({ParamUserID:idUser}),// here we def wich variabe is assiciated 
     contentType: "application/x-www-form-urlencoded; charset=iso-8859-1", 
     success: function(html) { 
     $('#user_specified_content').html(html); 
     } 
    });  
    } 
</script> 

Questo è lo script da cui ottengo il mio contenuto dalla pagina blabla.php.

Quando ricevo i miei dati in caso di successo, i miei accenti non vengono visualizzati.

Ho trovato una super buona soluzione di lavoro da parte mia per il recupero dei dati con accenti sui dati recuperati da .success funzione

sulla mia pagina blabla. Ho fatto questo per portare una soluzione al mio problema:

Io uso utf8_encode(place your data here) nel mio file php. Guardalo in azione qui di seguito:

while($row = sqlsrv_fetch_array($recordset)) 
{       
    <option value="<?php echo $row["xyz"]; ?>"><?php echo utf8_encode($row["gName"]) . ' | ' . utf8_encode($row["gManagerName"]); ?></option>       
} 
2

ho avuto un problema con le lettere svedese/norvegese che mostra come punti di domanda, pur avendo specificato:

contentType: "application/json; charset=utf-8", 

Questo è stato risolto con l'aggiunta di encodeURIComponent alla stringa.

url: "/set_comment.do?text=" + encodeURIComponent(comment), 
0

Ho affrontato lo stesso problema e ho provato diversi modi. E ho trovato la soluzione. Se imposti l'intestazione della richiesta per "Accetta" come di seguito;

$.ajax({ 
     data: parameters, 
     type: "POST", 
     url: ajax_url, 
     dataType: 'json', 
     beforeSend : function(xhr) { 
      xhr.setRequestHeader('Accept', "text/html; charset=utf-8"); 
     }, 
     success: callback 
}); 

vedrete che tutti i personaggi sembra corretto

0

mi è venuto da questa domanda con esattamente lo stesso problema come il richiedente. Le risposte qui sono molto istruttive e ho provato quasi tutte le risposte suggerite.Nessuna delle risposte qui ha funzionato per me però - potrebbe esserci stata una leggera differenza nel mio problema. E questo sembra essere il caso per molti. Ho provato tanto prima di finire con una risposta.

Così ora sto aggiungendo alla già lunga lista di risposte, una soluzione tutta mia che ha risolto il mio tipo di problema di codifica.

Ho fatto solo due cose. Nello script di connessione al database ho aggiunto:

mysql_set_charset('utf8',$connection); 

e oltre a questo:

  • ho cambiato la codifica di tutti i file in UTF-8

Il punto è che tutto deve essere della stessa codifica. E quando si creano nuovi file php, per gli script non è sufficiente cambiare la codifica nello script - il file stesso deve essere codificato correttamente.

0

Se si sta utilizzando CodeIgniter è possibile risolvere questo aggiungendo il seguente codice al controllore prima di caricare qualsiasi vista (ammesso che abbiate charset correttamente impostato sul vostro config. In caso contrario, appena messo charset=whateveryouwant.

$this->output->set_header('Content-type: text/html; charset='.$this->config->item('charset')); 

Il modo in cui l'ho fatto è stato aggiungere la riga al costruttore di MY_Controller, la mia superclasse per tutti i controller, in questo modo mi assicuro che non avrò problemi di codifica ovunque

A proposito, questo non ha effetto sui ritorni JSON (che sono codificati in UTF-8)

0

Ho provato a leggere un file json/testo locale utilizzando $ .ajax e la codifica non ha funzionato all'inizio. Ho funzionato salvando il file json come codifica UTF-8. Questo può essere fatto semplicemente dal blocco note di Windows .. utilizzare "Salva come", e quindi sotto il nome del file è possibile impostare la codifica su UTF-8.

buona fortuna!

2

Ho provato molti suggerimenti da leggere in un file di testo con caratteri speciali tedeschi (ä, ö, ü). Alla fine:

$.ajax({ 
     async:false, 
     type: "GET", 
     url: "data/FileName.txt", 
     dataType: "text", 
     contentType: "application/x-www-form-urlencoded;charset=UTF-8", 
     success: function (data) { 
      alert(data); 
     } 
    }); 

lasciatemi letto sui caratteri speciali, ma solo dopo che ho esplicitamente salvato FileName.txt nel formato UTF-8. Il formato standard per il salvataggio dei file di testo nell'Editor di Windows è ANSI e non UTF-8, ma può essere modificato se si "Salva come" e utilizzare la casella di riepilogo accanto al pulsante Salva o utilizzare un editor migliore per iniziare con.

0

Ho avuto un problema simile. Ho un file di testo con dati JSON con testo in francese. C'era sempre un problema che mostrava alcuni personaggi. Nel mio caso, il programma JavaScript utilizza Ajax per recuperare il file di testo JSON come segue: i dati

$.ajax({ 
    async: false, 
    type: 'GET', 
    url: 'some-url', 
    success: function(data, status) { 
     mainController.constructionStageMaster = data.records; 
    } 
}); 

restituita sempre avuto errate accentate lettere francesi.

Il testo JSON si presenta come segue:

{ 
    "records": [ 
     { 
      "StageDesc": "Excavation, Fondation et Bases", 
      "Allowed": 9, 
      "Completed": 0, 
      "TotalCompleted": "" 
     }, 
     { 
      "StageDesc": "Étanchement et Remblayage", 
      "Allowed": 3, 
      "Completed": 0, 
      "TotalCompleted": "" 
     }, 
     { 
      "StageDesc": "Encadrement et revêtement mural intermédiaire", 
      "StageDesc_fr": "Encadrement et revêtement mural intermédiaire np++", 
      "StageDesc_fr2": "Encadrement et revêtement mural intermédiaire", 
      "Allowed": 15, 
      "Completed": 0, 
      "TotalCompleted": "" 
     } 
     ... 
    ] 
} 

Nota nei dati di esempio di cui sopra, il terzo elemento, ho messo il testo con la corretta é e non corrette ê lettere accentate francesi.

Per vostra informazione, sembrava che non ci sia qualche configurazione globale del progetto Eclipse utilizzando ISO-8859-1 codifica dei caratteri. Nel tuo caso potrebbe essere una codifica diversa.

Dopo aver verificato le soluzioni sopra e giocare con il progetto, questo è ciò che ha risolto il mio problema:

  • trovare la fonte del testo che ha la corretta visualizzazione del testo francese
  • Copiare il testo
  • Goto Eclipse, aprire il file di testo che contiene i dati
  • pulsante destro del mouse sul file in Esplora, proprietà aperte, e modificare la codifica a ISO-8859-1
  • Correggi il testo in modo che venga visualizzato correttamente. Utilizzare copia/incolla o la tastiera
  • Potrebbe essere necessario utilizzare i tasti freccia della tastiera (sinistra/destra) per assicurarsi che non ci sono lettere colpevole nascoste che vi mostrerà-up su HTML con una forma divertente. Eliminare tale lettera nascosta
  • Salvare il file

Ora, nel mio caso, non ho specificare eventuali opzioni di codifica della chiamata Ajax e funziona benissimo. Inoltre, se cambio la codifica del file di testo con dati json, funzionerebbe comunque bene.

Tarek