• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Zeichenkodierung

Thyrael

Antonowka
Registriert
11.11.06
Beiträge
356
Hallo miteinander,

ich habe eine Frage bzw. ein Problem das mich mittlerweile ganz schön nervt. Ich erstelle zur Zeit eine Homepage. Der Inhalt wird zum Teil aus einer Datenbank geholt und zum Teil einfach nur aus Dateien.

Mein Problem ist die Zeichencodierung.

Alle Daten die aus der Datenbank ausgelesen werden, werden auch richtig wiedergegeben (Umlaute) Jedoch wird kein Umlaut der aus einer Datei kommt richtig ausgegeben. Ich hab schon alle möglichen Codierungen versucht doch keine funktioniert richtig. Nehme ich eine Codierung die die Dateien richtig darstellt, werden die Inhalte der Datenbank nicht richtig angezeigt, nehme ich eine Codierung bei der die Inhalte aus der Datenbank richtig dargestellt werden, sind die Inhalte aus den Dateien nicht richtig dargestellt.

Metatags werden nicht wirklich angenommen:

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

Ich hoffe ich konnte mich klar ausdrücken und hoffe außerdem dass mir jemand helfen kann, der dieses Problem vielleicht schon hatte... :-)
 
Code:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >

sollte eigentlich funktionieren
 
Danke für die schnelle Antwort. Aber in diesem Metatag hab ich schon so ziemlich jede Codierung eingetragen. Immer das selbe Problem. Der einzige Unterschied ist, dass statt der Fragezeichen, dann andere Zeichen angezeigt werden. Sogar MacRoman hab ich schon probiert.. *gg*
 
Zumindest sollten nun die Daten aus der DB korrekt dargestellt werden, oder ?

Welche Dateien ließt du denn aus ? Es kann sein das du diese Daten vor der Ausgabe konvertieren musst, damit die im Browser korrekt angezeigt werden.
 
1. Lösung: du machst eine Abfrage deiner Eingabe, ob 'ä','ö','ü' oder 'ß' enthalten sind und wandelst diese in html-freundliche Werte um, z.B. ü, ö .. usw.

Nachteil: deine Werte liegen in diesem Format in der Datenbank, z.B. Würfel == Würfel.

2. Lösung: du verwendest die PHP-Funktion htmlentities() http://de3.php.net/htmlentities

Es gibt mit Sicherheit auch noch reichlich andere Lösungen, wie du das Problem umgehen kannst. Meinerseits hast du die beiden erhalten, vielleicht hilft dir das ja schon.
 
Komischerweise nicht. Nehme ich utf-8 wird absolut kein Umlaut richtig dargestellt. Weder aus der Datenbank noch aus einer Datei.

Lasse ich den Codierungsmetatag komplett weg, werden die Umlaute aus der Datenbank richtig dargestellt... Jedenfalls aus der einen Tabelle aus einer anderen Tabelle und aus Dateien ==> nur Fragezeichen
 
Kannst du vllt etwas Quellcode posten ?
Wie ließt du die Dateien aus, welche Dateien sind es überhaupt und in welchem Format stehen die Daten in der Datei ?

Vllt kommt man so einer Lösung schon etwas näher.

Mit utf-8 kannst du schonmal Umlaute direkt ins HTML schreiben, ohne die HTML-Entitäten verwenden zu müssen.

Ist jetzt bloß die Frage in welchem Format die Daten ankommen.
 
Die Lösung ist, alles konsequent auf UTF-8 einzustellen und auch so auszuliefern.
Warum UTF-8? -> Darum.

Wie?
1. In deinem Code-Editor muss UTF-8 für jede einzelne Datei eingestellt sein.
2. Der Server muss angewiesen werden, als UTF-8 auszuliefern (
Code:
<?php header('content-type: text/html; charset=utf-8'); ?>
)
3. Die Datenbank muss auf UTF-8 eingestellt werden.

Mehr dazu hier.

Die beste, zukunftssicherste und einfachste Lösung.
Außerdem werden außer &lt;, &gt;, &quot; und &amp; werden keine Entities benötigt.
 
Danke für eure schnelle Hilfe. Es war tatsächlich so, dass ich vergessen hatte im Code-Editor utf-8 einzustellen.
 
Gerade umgekehrt

Bei mir verhält es sich gerade verkehrt herum: Die Daten aus der MySQL-Tabelle werden falsch angezeigt, also ç wird durch ein ? ersetzt, aber Zeichen aus einer Datei kommen richtig an.

Dabei sollte eigentlich alles stimmen, denn die Tips aus diesem Thread habe ich komplett umgesetzt:
  • Code:
    header('Content-Type: text/html; charset=utf-8');
    wird mitgesendet, am Anfang der Datei
  • MySQL ist auf utf8_unicode_ci eingestellt
  • META-Tag ist da, mit UTF-8
Wo könnte mein Fehler liegen oder gibt es eine Möglichkeit, das zurechtzubiegen? Die PHP-Funktion htmlentities hat zwar geholfen, aber es wäre mir lieber, wenn ich wirklich mit UTF-8 arbeiten könnte.
 
Wie kommen denn die Daten IN die MySQL-Datenbank? Möglicherweise musst du das entsprechende Formular noch auf UTF-8 setzen. Wie MySQL das intern speichert, ist nicht so wichtig. Nur die Ausgabe muss zur Eingabe passen.
 
  • Like
Reaktionen: floeschen
Danke für die Hilfe. ;)

Das Problem hat sich gelöst, dank einem Eintrag im Forum von SELFHTML. Nun sende ich einen MySQL-Query immer am Anfang jeder Seite, in dem folgendes steht:
Code:
SET NAMES utf8

Ich bin eben beim Aufbau eines kleinen für mich gemachten CMS und gebe die Daten bisher nur mit dem phpMyAdmin ein. Jetzt komme ich dann daran, per Formular alles einzugeben und zu ändern.