jQuery AJAX Zeichencodierung

Ich bin gerade dabei, eine französische Website zu programmieren. Es gibt eine Zeitplanseite, auf der ein Link auf der Seite verwendet werden kann, um den Zeitplan eines anderen Tages zu laden.

Hier ist der JS, mit dem ich das mache:

 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();  

Das eigentliche AJAX wirkt wie ein Zauber. Mein Problem liegt in der Antwort auf die Anfrage.

Da es sich um eine französische Website handelt, gibt es viele Buchstaben mit Akzenten. Ich verwende den ISO-8859-15-Zeichensatz genau aus diesem Grund. In der Antwort auf meine AJAX-Anfrage werden die Akzente jedoch immer größer, weil die Zeichencodierung anscheinend wieder in UTF-8 geändert wird.

Wie vermeide ich das? Ich habe bereits versucht, PHP oben in den angeforderten Dokumenten hinzuzufügen, um den Zeichensatz festzulegen:

  

Aber das scheint auch nicht zu funktionieren. Irgendwelche Gedanken?

Auch wenn jemand von Ihnen hier hinschaut … warum scheint die Spalte ganz rechts kleiner zu werden, wenn eine neue Seite geladen wird, wodurch die Tabelle verzerrt wird und jedes

  • innerhalb des in die nächste Zeile springt?

    Prost

    UTF-8 soll mit allen Akzenten und fremden Zeichen umgehen – warum nicht in Ihrer Datenquelle verwenden?

    BEARBEITEN
    [ Kopie der Testdatei archivieren. ] mit Ihren Daten

    Alles sollte UTF-8 an erster Stelle sein. Ich habe die Dateien in notepad ++ geladen, in utf-8 konvertiert und die Zeichen manuell in Akzente geändert. Einmal fertig, funktioniert alles wie ein Zauber.

    Übrigens, es sei denn, Ihr Server ist für php-process .html-Dateien definiert, die Dateien, die Sie mit Ajax laden, erhalten Ihren iso-Zeichensatz nicht. Wenn Sie darauf bestehen, den ISO-Zeichensatz zu verwenden, fordern Sie eine PHP-Datei anstelle einer HTML-Datei an und definieren Sie den Zeichensatz in der Kopfzeile (nicht in der Datei selbst).

  • Die Angabe des Inhaltstyps beim AJAX-Aufruf triggerse meine Probleme auf einer norwegischen Seite.

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

    Sie müssten auch den Zeichensatz auf dem Server angeben.

     < ?php header('Content-Type: text/html; charset=ISO-8859-15'); ?> 
     $str=iconv("windows-1250","UTF-8",$str); 

    was mir letztendlich geholfen hat

    Sie müssen Ihren Server so einrichten, dass ISO-8859-15 als Zeichencodierung verwendet wird (Hinzufügen des entsprechenden HTTP-Headers). Doing es im Körper des HTML wird nicht helfen.

    Ich kann diese Linie sehen

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

    an der Quelle Ihres HTML. Dies sollte nicht passieren. Verwenden von Live-HTTP-Headern Ich kann den entsprechenden Charset-HTTP-Header nicht sehen. Verwenden Sie das für Ihre erste Seite und den Ajax-Service.

    Ich würde vorschlagen, die JavaScript-Methode escape () zu verwenden

    Sie können dies mit jQuery verwenden, indem Sie einen Formularwert wie folgt erfassen:

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

    Für meine PHP-Anwendung war die Lösung utf8_decode-function für jede Variable in $_POST .

    Bsp .: (SERVER SEITE)

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

    Abraços !!! (Tschüss!!!)

    Beim Ausdrucken der Variablen in der Ajax-Datei. Setzen Sie a

     htmlentities() 

    Um sie herum, ob es funktioniert. Arbeitete für mich in einer isländischen Ajax-Anwendung.

    Ich hatte ähnliche Probleme und arbeitete in einem Content-Kommentar-System in unserem spanischen Portal. Was schließlich mein Problem getriggers hat, nach vielen Stunden der Suche, anstatt mit jQuery-Zeichensatz zu verwirren, die utf-8 egal zu verwenden scheint, war es von utf-8 zurück zu ISO-8859-1 in der PHP zu decodieren, die verarbeitete der Ajax POST. In PHP gibt es eine integrierte function, utf8_decode() , also ist das erste, was ich mit der Kommentarzeichenfolge mache:

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

    (und dann habe ich nl2br() und htmlentities() PHP-functionen verwendet, um den Text vorzubereiten, der mit HTML-Entities anstelle von speziellen Zeichen gespeichert wird)

    Viel Glück & Frieden überall! Seba

    Ich habe mit diesem Problem herumgetüftelt und herausgefunden, dass diese Lösung für Firefox und Safari funktioniert (ja, ich bin im Moment auf einem Mac).

    Als ich die Anfrage bekommen habe, habe ich hier einen Inhaltstyp = iso-8859-1 erstellt:

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

    Bitte sagen Sie mir, wenn jemand herausfindet, dass das in ie nicht funktioniert.

    Ich hatte ein ähnliches Problem mit ASP mit meinen Seiten. Ich habe es so getriggers:

    1) eingefügt am Anfang der ASP-Datei von JQuery AJAX-Methode die statement aufgerufen:

     Response.Charset = "windows-1252" 

    In meiner asp-Seite vor dem Zeichensatz wurde nicht definiert und ich hatte meine Datei mit ANSI-Codierung gespeichert (mit einem Texteditor als Notepad ++)

    2) In der HTML-Datei, die die ASP-Datei mit der jquery ajax-Methode aufruft, habe ich den folgenden Parameter content-typ eingefügt:

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

    Kurz gesagt, es ist wichtig, dass Sie in Ihrer ASP-Datei den Zeichensatz definieren. Seltsamerweise sehe ich, dass meine jquery mit Windows-1252 arbeitet, aber nicht mit ISO-8859-1-Zeichensatz funktioniert: In diesem Fall gibt die jquery ajax-Methode eine Ausnahme.

    Ich hatte ein Problem mit schwedischen / norwegischen Briefen, die sich als Fragezeichen zeigten, obwohl ich Folgendes angegeben hatte:

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

    Dies wurde durch Hinzufügen von encodeURIComponent zur Zeichenfolge getriggers.

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

    Ich habe viele Vorschläge ausprobiert, um eine Textdatei mit deutschen Sonderzeichen (ä, ö, ü) zu lesen. Schlussendlich:

      $.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); } }); 

    Lassen Sie mich die Sonderzeichen einlesen, aber erst nachdem ich FileName.txt explizit im UTF-8-Format gespeichert habe . Das Standardformat zum Speichern von Textdateien im Windows Editor ist ANSI und nicht UTF-8, aber es kann geändert werden, wenn Sie “Speichern unter” verwenden und die Dropbox neben dem Speichern-Button verwenden oder einen besseren Editor verwenden.

    Ich stimme NICHT zu, alles muss UTF-8 sein, Sie können es perfekt mit ISO 8859 arbeiten lassen, ich tat, bitte lesen Sie meine Antwort hier.

    meine Antwort im Stackoverflow

      

    Dies ist das Skript, von dem ich meinen Inhalt von der blabla.php-Seite bekomme.

    Wenn ich meine Erfolgsdaten erhalte, erscheinen meine Akzente nicht.

    Ich habe eine super gute funktionierende Lösung gefunden, um Daten mit Akzenten auf den abgerufenen Daten von der .success function zu .success

    Auf meiner blabla Seite. Ich habe dies getan, um eine Lösung für mein Problem zu finden:

    Ich benutze utf8_encode(place your data here) in meine PHP-Datei. Sehen Sie es in Aktion unten:

     while( $row = sqlsrv_fetch_array($recordset) ) {  } 

    Wenn die gesamte Anwendung ISO-8859-1 verwendet, können Sie Ihre Datei jquery.js so ändern, dass alle Vorkommen von encodeURIComponent durch escape (im aktuellen jquery-Skript müssen 2 Vorkommen ersetzt werden – 1.5.1)

    Weitere Informationen finden Sie unter encodeUIComponent und escape

    Ich habe dasselbe Problem gesehen und verschiedene Wege ausprobiert. Und ich habe die Lösung gefunden. Wenn Sie den Anforderungsheader für “Akzeptieren” wie folgt setzen:

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

    Du wirst sehen, dass alle Charaktere korrekt sind

    Ich kam mit dieser Frage mit genau der gleichen Frage wie der Fragesteller. Die Antworten hier sind sehr informativ, und ich habe fast jede einzelne der vorgeschlagenen Antworten ausprobiert. Keine der Antworten hier funktionierte für mich obwohl – es könnte einen kleinen Unterschied in meinem Problem gegeben haben. Und das scheint für viele der Fall zu sein. Ich habe so viel versucht, bevor ich mit einer Antwort endete.

    Jetzt füge ich zu der bereits langen Liste von Antworten eine eigene Lösung hinzu, die meine Art von Codierungsproblem triggerse.

    Ich habe nur zwei Dinge gemacht. Im databaseverbindungsskript habe ich hinzugefügt:

     mysql_set_charset('utf8',$connection); 

    und abgesehen davon:

    • Ich habe die Kodierung aller Dateien in UTF-8 geändert

    Der Punkt ist, dass alles die gleiche Kodierung haben muss. Und beim Erstellen neuer PHP-Dateien reicht es für die Skripte nicht aus, nur die Kodierung im Skript zu ändern – die Datei selbst muss korrekt kodiert sein.

    Habe gerade {"type":"GET"} in {"type":"POST"} geändert und arbeitete wie ein Charm mit ISO-8859-1

    Ich hatte das gleiche Problem mit Seiten, die:

    • Schön angezeigt, wenn normal aufgerufen
    • Lassen Sie die Sonderzeichen beim Aufruf über eine Ajax-Anfrage durcheinander

    Um das Problem zu lösen (mit PHP), habe ich utf8_encode() oder htmlentities() für die Quelldaten verwendet. Beide haben gearbeitet, ich habe sie in verschiedenen Projekten verwendet.

    Wenn Sie CodeIgniter verwenden, können Sie dies lösen, indem Sie Ihrem Controller den folgenden Code hinzufügen, bevor Sie irgendwelche Ansichten laden (vorausgesetzt, Sie haben charset korrekt in Ihrer Konfiguration gesetzt. Wenn nicht, setzen Sie einfach charset=whateveryouwant .

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

    Die Art, wie ich es gemacht habe, war, diese Zeile zum Konstruktor von MY_Controller, meiner Oberklasse für alle Controller, hinzuzufügen, auf diese Weise stelle ich sicher, dass ich nirgendwo Codierprobleme habe.

    Das betrifft übrigens keine JSON-Returns (die in UTF-8 kodiert sind).

    Ich habe versucht, eine lokale json / Text-Datei mit $ .ajax zu lesen und die Codierung funktionierte nicht zuerst .. Ich habe es funktioniert, indem Sie die JSON-Datei als UTF-8-Codierung speichern. Dies kann einfach durch Windows-Editor erfolgen .. Verwenden Sie “Speichern unter”, und dann unter dem Dateinamen können Sie die Codierung auf UTF-8 festlegen.

    Viel Glück!

    Ich hatte ähnliches Problem. Ich habe Textdatei mit JSON-Daten, die französischen Text hat. Es gab immer Probleme beim Anzeigen einiger Zeichen. In meinem Fall verwendet das JavaScript-Programm Ajax zum Abrufen der JSON-Textdatei wie folgt:

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

    Die zurückgegebenen Daten hatten immer falsch akzentuierte französische Buchstaben.

    Der JSON-Text sieht folgendermaßen aus:

     { "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": "" } ... ] } 

    Hinweis in den obigen Beispieldaten, das 3. Element, legte ich den Text mit den richtigen é und inkorrekt ê Französisch ê .

    Zu Ihrer Information schien es, dass es eine globale Konfiguration des Eclipse-Projekts mit ISO-8859-1 Zeichencodierung gibt. In Ihrem Fall könnte es eine andere Codierung sein.

    Nachdem ich die obigen Lösungen überprüft und mit dem Projekt herumgespielt habe, hat das mein Problem getriggers:

    • Finde die Quelle des Textes, der die korrekte Darstellung des französischen Textes hat
    • Kopiere den Text
    • Gehe zu Eclipse, öffne die Textdatei, die die Daten enthält
    • Klicken Sie mit der rechten Maustaste auf die Datei im Explorer, öffnen Sie die Eigenschaften und ändern Sie die Codierung in ISO-8859-1
    • Korrigieren Sie den Text so, dass er korrekt angezeigt wird. Verwenden Sie Kopieren / Einfügen oder die Tastatur
    • Möglicherweise müssen Sie die Pfeiltasten der Tastatur (links / rechts) verwenden, um sicherzustellen, dass keine versteckten Täterbuchstaben in HTML mit einer lustigen Form angezeigt werden. Löschen Sie diesen versteckten Brief
    • Speicher die Datei

    Nun, in meinem Fall habe ich beim Ajax-Aufruf keine Kodierungsoptionen angegeben und es funktioniert einwandfrei. Wenn ich die Kodierung der Textdatei mit JSON-Daten ändere, würde es immer noch gut funktionieren.

    Tarek