tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Sven Mintel
  • 1 Beitrag von Sven Mintel
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
348
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    May 2004
    Ort
    Computer (Nürnberg)
    Beiträge
    689
    Hallo Tutorials.de-Community,

    ich habe nach meinem Serverumzug ein Problem mit der Zeichenkodierung bei meinem Projekt, aber auch generell Verständnislücken zu diesem Thema.

    Es geht darum, dass Leute Kommentare zu Bildern geben können. Diese Kommentare werden über ein AJAX-Script an eine PHP-Datei gesendet und dort in die Datenbank geschrieben.

    Ihr könnt euch dazu gerne hier das aktuelle Projekt ansehen. Einfach ein Vorschaubild anklicken und in der unteren Leiste auf "Kommentar hinzufügen" klicken.

    Das Problem:
    Wenn jemand einen Kommentar mit Umlauten abschickt, dann werden diese in der Datenbank nicht normal, sondern in dieser Form gespeichert:
    Zitat Zitat von Originaleintrag
    Meine Nachricht: ööäüöÖPÜLÜÄL
    Zitat Zitat von Datenbank
    Meine Nachricht: ööäüöÖPÜLÜÄL
    Die Anzeige des Kommentars (auch mit AJAX realisiert) wird dann seltsamerweise richtig dargestellt Ich habe auch durchgängig die Kodierung "charset=ISO-8859-1" gewählt und die Datenbanken sind nach "latin-german1" umgestellt(was ist eigentlich der Unterschied zu german2?).
    Mein Hauptproblem ist also, dass Umlaute und auch andere Sonderzeichen wie das scharfe S (ß) in der Datenbank falsch gespeichert werden und ich damit auch schädlichen HTML-Code nicht verhindern kann(da etwa htmlentities nicht richtig funtioniert)!

    Welchen Unterschied macht die Charset-Definition eigentlich bei....
    • ...der META-Tag-Definition
    • ...dem Javascript-Befehl "setRequestHeader"
    • ...dem PHP-Befehl: "header()"
    • ...der Definition in Dateien (z.B. xyz.php) des Charsets beim Speichern

    Man findet so schwer irgendwelche zusammenfassenden Informationen, was man als Webdesigner zu beachten hat und welche Charset-Definition jetzt eigentlich gilt. Ich hab längere Zeit gesucht und bitte euch jetzt um Hilfe, da ihr einfach das kompakte Know-How habt.

    Vielen Dank also schonmal für eure Zeit und eure Mühen!

    Adam
     
    Da' Hacker - WINXP - C4D R8.5 - VB6.0! C4D/VB-Status: Erfahrener.
    .:.:.:.-<>-_-#Hab' ein Dynamics Tutorial am laufen! - HIER: Grundlagen der Dynamics #-_-<>-.:.:.:.
    Mein eigener Internet-Fernsehsender: www.LwTV.de
    Now Online: www.AdamKalisz.de

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin Adam,

    Zitat Zitat von Da Hacker Beitrag anzeigen
    Man findet so schwer irgendwelche zusammenfassenden Informationen, was man als Webdesigner zu beachten hat und welche Charset-Definition jetzt eigentlich gilt.
    Gucke mal in die PHP-FAQ
    Da Hacker bedankt sich. 

  3. #3
    Registriert seit
    May 2004
    Ort
    Computer (Nürnberg)
    Beiträge
    689
    Hi Sven,

    vielen Dank!

    Oh Gott, bin ich der Grund für den FAQ-Eintrag? *schäm*

    Aber vielen Dank. Werde deine Checkliste demnächst durcharbeiten, um meinem Fehler auf die Spur zu kommen.

    Ziemlich verwirrend das ganze. Ich hab natürlich das Problem, dass ich mich nicht auf UTF sondern ISO festgelegt habe und ich befürchte, dass ich nochmal sämtliche Umlaute irgendwie ändern muss(was unmöglich ist). Aber wie gesagt, hab das FAQ vorerst nur überflogen.

    Natürlich bin ich auch Lösungsansätze, die direkt mein Problem betreffen, nicht abgeneigt. Doch vorerst kann ich diesen Beitrag mal als "erledigt" markieren.

    Danke! Beste Grüße
    Adam
     
    Da' Hacker - WINXP - C4D R8.5 - VB6.0! C4D/VB-Status: Erfahrener.
    .:.:.:.-<>-_-#Hab' ein Dynamics Tutorial am laufen! - HIER: Grundlagen der Dynamics #-_-<>-.:.:.:.
    Mein eigener Internet-Fernsehsender: www.LwTV.de
    Now Online: www.AdamKalisz.de

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Zitat Zitat von Da Hacker Beitrag anzeigen
    Oh Gott, bin ich der Grund für den FAQ-Eintrag? *schäm*
    Nö, biste nicht, hättest du aber sein können, wenn dir nicht wer zuvorgekommen wäre

    Was dein Problem ansich betrifft:
    Ich würde fast glauben, dass du gar keines hast.

    Du schreibst, es steht so in der Datenbank....woran erkennst du das?
     

  5. #5
    Registriert seit
    May 2004
    Ort
    Computer (Nürnberg)
    Beiträge
    689
    Hi Sven,

    ha, nochmal knapp entkommen

    Nunja. Schon allein an zwei Dingen erkenne ich mein Problem:

    1. PHPmyAdmin:
    Wenn ich mir den Datensatz in PHPmyAdmin ansehe, kann ich bereits die Fehlformatierung sehen. Ich habe hier einen Screenshot angehängt, wie Bilderkommentare in die Datenbank eingetragen werden: Charset_Error.jpg

    2. Resultat des MySQL-Datensatzes
    Wenn ich mir im PHP-Skript das Resultat der Datenbank hernehme und dieses versuche mit dem Befehl "htmlentities()" zu kodieren, dann liefert mir PHP den entsprechend "escapten" (z.B. &Atilde HTML-Code

    Das sind für mich die beiden Anzeichen, durch die ich gemerkt hab, dass irgendetwas nicht stimmt, aber vor allem verhindert dies die Problemlösung -.-

    Danke, dass du dir da nochmal Zeit nimmst
    Es würde mich freuen, wenn ich kein Problem hätte... ...aber das wäre wohl zu schön

    Adam
     
    Da' Hacker - WINXP - C4D R8.5 - VB6.0! C4D/VB-Status: Erfahrener.
    .:.:.:.-<>-_-#Hab' ein Dynamics Tutorial am laufen! - HIER: Grundlagen der Dynamics #-_-<>-.:.:.:.
    Mein eigener Internet-Fernsehsender: www.LwTV.de
    Now Online: www.AdamKalisz.de

  6. #6
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Ich würde mal denken, dass da Latin1 nicht als Verbindungs-Datensatz genutzt wird, sondern UTF-8

    Die Lösung wäre wie in den FAQ beschrieben :

    Code :
    1
    
    SET NAMES latin1

    Möglichwerweise könnte dies aber ein Chaos mit neuen Datensätzen bringen, dann probiere folgendes:
    Code :
    1
    
    SET character_set_results = latin1;

    ...das sorgt dafür, dass der DB-Server in Latin1 antwortet. Der Rest erfolgt wie bisher, es hat also keine Auswirkungen auf die Datenbank ansich.
     

  7. #7
    Registriert seit
    May 2004
    Ort
    Computer (Nürnberg)
    Beiträge
    689
    Danke Sven für deine schnelle Hilfe

    Genau an den Lösungsansatz mit "SET" habe ich als erstes gedacht, als ich mir dein FAQ angesehen habe. Wenn du das jetzt noch als Lösung für mein Problem siehst, werde ich das wohl als erstes ausprobieren.

    Die Kollation der Tabelle ist von anfang an auf "latin1-german1-ci" gesetzt. Mich würde daher interessieren, was du mit "Verbindungs-Datensatz" meinst?

    Dein FAQ hilft mir sehr gut die Eigenheiten des Charsets zu verstehen... ...trotzdem ist bei mir immer noch die Unklarheit, warum das PHP-Skript bzw. AJAX Umlaute dennoch in dieser komischen Form in die Datenbank einträgt.

    Nunja, wie gesagt, ich muss die FAQ selber nochmal durchprobieren. Außerdem möchte ich dich nicht weiter mit meinem Problem nerven.

    Herzlichen Dank und beste Grüße:
    Adam
     
    Da' Hacker - WINXP - C4D R8.5 - VB6.0! C4D/VB-Status: Erfahrener.
    .:.:.:.-<>-_-#Hab' ein Dynamics Tutorial am laufen! - HIER: Grundlagen der Dynamics #-_-<>-.:.:.:.
    Mein eigener Internet-Fernsehsender: www.LwTV.de
    Now Online: www.AdamKalisz.de

  8. #8
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Ooops, ich meinte natürlich Verbindungs-Zeichensatz

    Also wenn der nicht auf Latin1 steht, dann antwortet der Server mit einem anderen Zeichensatz.

    Da geht dann bspw. das in den FAQ erwähnte Problem mit den String-Funktionen los, denn auch htmlentities() geht standardmässig davon aus, dass es einen Latin1-String verarbeitet.
    Du kannst da also entweder den DB-Server veranlassen, in Latin1 zu antworten, oder aber teilst htmlentities() über den 3.Parameter den Zeichensatz mit, in dem der Server antwortet.
    Da Hacker bedankt sich. 

Ähnliche Themen

  1. [AJAX] Fehler mit return var
    Von totalNooob im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 16.01.10, 05:12
  2. Ajax in Modul, Fehler Joomla
    Von =fire= im Forum Javascript & Ajax
    Antworten: 17
    Letzter Beitrag: 23.07.09, 16:26
  3. ajax fehler popup
    Von Zack im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 15.05.09, 18:24
  4. Ajax Sonderzeichen Fehler
    Von RaVenC im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 20.06.08, 12:42
  5. Ajax - Fehler in Firefox und IE
    Von flooo im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 11.06.06, 11:01