Warum werden die Daten nicht korrekt in der MySql-Db gespeichert? [UTF-8]

VanHellsehn

Erfahrenes Mitglied
Hi,

Ich habe meine DB und Seite auf UTF-8 gebracht.
Und habe folgenden Code:
PHP:
$db = new MySqli("localhost", "root", "", "xyz");
$db->set_charset("utf8");
$this->con = $db;
        $name  = $this->con->real_escape_string($_POST['name']);
        $email = $this->con->real_escape_string($_POST['email']);
        $text  = $this->con->real_escape_string($_POST['text']);
        $homepage = ($_POST['homepage']!=NULL)? $this->con->real_escape_string($_POST['homepage']) : NULL;
        
        if($homepage != NULL)
            $sql = "INSERT INTO `comments` 
                           (name, email, homepage, text, ip, timestamp, keyword)
                    VALUES ('".$name."', '".$email."', '".$homepage."', '".$text."',
                            '".$_SERVER['REMOTE_ADDR']."', '".time()."', '".$this->keyword."')";

Er über nimmt die Daten aus folgenden Formular:
HTML:
<form action="http://<?php echo $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; ?>#com" method="post" id="comForm" accept-charset="utf-8">
<p><label for="name">Name: <span>*</span></label>
<input type="text" name="name" id="name" value="" /></p>
.
.
.
</form>

Und bei der MySql-Tablle sind alle Felder auf Kollation utf8_general_ci gestellt.
Nun kommt aber sowas (ääüüüpü) dabei heraus wenn ich ä´s etc rein schreiben möchte.

Jetzt meine frage was muss ich noch tuen?!
 
Zuletzt bearbeitet:
Hi,

ich würde dir empfehlen Unicode als Charset für deine Seite zu verwenden (was ja eh standart ist, bzw standartisiert wird).
Danach sollte das eigentlich funktionieren mit den Zeichen.
Ansonsten empfehle ich dir alle Umlaute umzuschreiben. Dh. für ein ä &auml;.
Für ein Ä &Auml;
Code:
HTML für folgende Umlaute:
ä - &auml;
Ä - &Auml;
ö - &ouml;
Ö - &Ouml;
ü - &uuml;
Ü - &Uuml;
ß - &szlig;

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

EDIT: wenn du noch was zum thema nachlesen möchtest, KLICK
Anere Stichwörter bei Google sind UTF-8, Unicode, ISO-8859-1, charset, html, umlaute...
 
Zuletzt bearbeitet:
Weitere Zeichensätze die neben den reinen Datenbankfelder intressieren ist der Charset der Website. Denn im gleichen sendet der Browser die Inputfelder.

Eine Globale Lösung wie man es für alle Datenbank befehle zurecht schieben könnte währe den Zeichensatz der datenbank verbindung zu ändern hier z.B. auf utf8
PHP:
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");

Die HTML entities in die Datenbank zu schreiben ist nicht zu empfehlen da man sich hier Datenbankfunktionen zum vergleichen und suchen verbaut.
 
ich würde dir empfehlen Unicode als Charset für deine Seite zu verwenden (was ja eh standart ist, bzw standartisiert wird).
HTML:
<meta http-equiv="content-type" content="text/html"; charset="ISO-8859-1" />

Das passt nicht ganz zusammen xD
Aber naja ich habe schon Unicode für meine Seite als Zeichensatz.
HTML:
<?xml version="1.0" encoding="utf-8"?>
<html>
 <head>
  <meta http-equiv="content-type" content="text/html;charset=utf-8" />
 </head>...
All das habe ich schon da es ganz klar ist..

Edit:
Weitere Zeichensätze die neben den reinen Datenbankfelder intressieren ist der Charset der Website. Denn im gleichen sendet der Browser die Inputfelder.

Eine Globale Lösung wie man es für alle Datenbank befehle zurecht schieben könnte währe den Zeichensatz der datenbank verbindung zu ändern hier z.B. auf utf8
PHP:
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");
.

Damit klappt es auch nicht..

Die HTML entities in die Datenbank zu schreiben ist nicht zu empfehlen da man sich hier Datenbankfunktionen zum vergleichen und suchen verbaut.

Würde ich niemals machen.. ist fast so wie wenn man in einem Forum die BB-Codes erst ersetzt und dann den Artikel speichert.. es bringt nichts ^^
 
Zuletzt bearbeitet:
Was mir gerade noch bei deinem Quelltextschnipsel aufgefallen ist: du verwendest XHTML (erkennbar an der XML-Deklaration in der ersten Zeile), aber den MIME-Typ für normales HTML text/html. Aus Ordnungsgründen verwende lieber den MIME-Typ für XHTML: application/xhtml+xml
 
Einige verwirrte Leute sind offenbar der Überzeugung, mit

<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />

in einem text/html-Dokument den XML-Parser des Benutzeragenten aktivieren zu können. Das ist natürlich Unsinn. Ein Benutzeragent müßte mit seinem Tagsoup-Parser beginnen und ab dem meta-Element mit seinem XML-Parser weitermachen oder gar noch einmal von vorne beginnen.

Tatsächlich ist application/xhtml+xml an dieser Stelle nicht nur wirkungslos, sondern sogar schädlich. Mindestens Lynx nämlich kann aus

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

die Deklaration der Codierung ermitteln, aus

<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />

aber nicht. Es spricht nichts dagegen, auch in einem XHTML-Dokument die Zeichencodierung bspw. mit

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

anzugeben. Das kann sogar notwendig sein, wenn Sie die Zeichencodierung ansonsten nur in der XML-Deklaration angegeben und nicht in einem „echten“ HTTP-Header wie Content-Type: text/html; charset=iso-8859-1, denn HTML-Benutzeragenten verarbeiten die XML-Deklaration nicht.

Mit application/xhtml+xml im richtigen Content-Type-Header ist das meta-Element hingegen völlig irrelevant.

Quelle: http://schneegans.de/web/xhtml/

Also ich denke ich lasse das ^^
 
Zuletzt bearbeitet:
Zurück