Codierung utf-8

Hi…

Ich habe gerade ein Problem mit Codierungen und zwar werden ‘ß’ als � angezeigt. Die Daten liegen in einer Mysql-Tabelle. Die Datei, in der die Eingaben gemacht werden ist utf-8, die Kollation der Mysql-Tabellen ist utf8_bin und die Datei in der die Daten ausgegeben werden ist auch utf-8.

Wenn ich Sonderzeichen direkt in die Datei schreibe, dann werden sie richtig angezeigt. Es muss also irgendwie mit der Datenbank zusammenhängen.

Der Fehler tritt genau hier auf: uvc-jugend.xe.cx/?option=team&item=3

Weiß irgendwer was ich da falsch mache?

mfg

schau mal bitte in die DB, ob die Zeichen richtig UTF-8 kodiert sind.

Entweder beim Schreiben oder beim Lesen in die DB fehlt ein utf8_encode :wink:

Also im phpmyadmin siehts so aus:

Wann muss man ein utf8_encode machen?

versuch mal das hier:

mysql_set_charset("utf8"); //setzt den Zeichensatz der MySQL-Verbindung

Hab da von jw jetzt eingefügt. Jetzt kommt statt dem ‘ß’ ein ‘㟒.

Dann sind die Daten nicht echt UTF-8 :ps:

wsl hat michi7x7 dann mit seinem genasuo Recht, und du musst beides machen :smiley:

Header ist richtig (und mit Charset-Angabe)?

ps: Wenn du htmlentities verwendest, ersetze doch mal durch:

htmlentities($string, ENT_COMPAT, "utf-8")

Wenn Datenbankfelder in UTF-8 definiert sind, Dokument in UTF-8 ist, und nach dem Setzen der Verbindungskodierung auf UTF-8 die Zeichen nicht mehr “stimmen” - dann sind sie vermutlich schon falsch in der DB drin.

Das Aushandeln der für die Verbindung PHP - MySQL verwendeten Kodierung ist wichtig - denn wenn die auf einem falschen (Default-)Wert steht, dann kodiert die Datenbank ein- und ausgehende Daten selbstständig um.

Btw:

Dass das blödsinnig ist, so lange du das Dokument als text/html auslieferst, ist dir bewusst …?

Wiso blödsinnig? Ich sende ja diesen Header:

<?php
	if(stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml")){
  		header("Content-type: application/xhtml+xml");
	} else {
  		header("Content-type: text/html");
	}
	header('charset=utf-8');
?>

Genügt dafür das was jw vorher geschrieben hat?

mysql_set_charset('utf8');

Sorry, ich hatte das mit dem Web-Sniffer getestet, und der sendet keinen HTTP_ACCEPT-Header. (Was dann übrigens auch prompt zu Undefined index-Meldungen führt - du solltest also erst mal überprüfen, ob es den Eintrag in $_SERVER überhaupt gibt, bevor du ihn auszuwerten versuchst.)

bei mir macht bplaced automatisch diese Fragezeichen. obwohl es UTF-Codiert ist -.- es sind normale html dateien.

Kann es sein, dass die Daten, die vom Client aus dem Formular kommen noch eine andere Codierung aufweisen und ich bevor ich die Daten in die Datenbank eintrage ein utf8_encode() drüberlaufen lassen muss?

bplaced macht hier garnichts - ausser die Server zu betreiben und zu warten :wink:

Vermutlich ist es eben nicht UTF-8 kodiert, oder du hast einen falschen Charset angegeben.
Und sonst beschäftige dich mal mit Entities:

de.selfhtml.org/html/referenz/zeichen.htm

Probiers aus, und die wirst es sehen. der Server wird schon nicht abstürzen :slight_smile:

In der DB sind sie nicht richtig kodiert, d.h. du musst die Daten vor dem Eintragen durch utf8_encode laufen lassen (und warscheinlich beim ausgeben auch).

Wie es mit mysql_set_charset aussieht, weiß ich leider auch nicht genau. :astonished: