• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Gästebuch klappen Sonderzeichen nicht

Seppeli

Neues Mitglied
Guten Abend zusammen.
Ich habe ein Gästebuch geschrieben. Auch extra die Sonderzeichen so, dass sie automatisch ersetzt werden, also ä,ö,ü,ß. Aber trotzdem klappt das nicht. Es werden immer Fragezeichen in einem Quadrat angezeigt. Hab ich irgendwas vergessen oder so? Ich häng mal den PHP-Code von der Datei an, hoffe ihr könnt mir helfen. Danke schonmal!!

PHP:
<html><head>
<title>Pf&ouml;tchenschule Dernau</title>
<link rel="stylesheet" type="text/css" href="/css/designgaestebuch.css"/></head><body>
<h1>G&auml;stebuch - Pf&ouml;tchenschule Dernau</h1>      <?php    
      require_once('recaptchalib.php');  $privatekey = "privatekey";  $resp = recaptcha_check_answer ($privatekey,
         $_SERVER["REMOTE_ADDR"],
         $_POST["recaptcha_challenge_field"],
         $_POST["recaptcha_response_field"]);
 
 if (!$resp->is_valid) {
    // What happens when the CAPTCHA was entered incorrectly
   die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
    "(reCAPTCHA said: " . $resp->error . ")");
   } else {
    // Your code here to handle a successful verification

                $name = $_POST["name"];
                $mail = $_POST["mail"];
                $nachricht = $_POST["nachricht"];

                if($name == "" or $mail == "" or $nachricht == "") {
                echo "Du hast die Felder nicht ausgef&uuml;llt...";
                } else {
                $verbindung = mysql_connect("localhost", "xyz", "xyz")
                        or die ("Fehler im System");
                        mysql_select_db("xyz")
                        or die ("Verbidung zur Datenbank war nicht möglich...");

                        $id = 0;
 $abfrage = "SELECT id FROM guestbook ORDER BY id DESC LIMIT 1";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
                                {
                                     $id = $row->id;
                                }
                        $id++;

                        $timestamp = time();
                        $datum = date("d.m.Y", $timestamp);

                        $nachricht = str_replace("ä", "&auml;", $nachricht);
$nachricht = str_replace("Ä", "&Auml;", $nachricht);
$nachricht = str_replace("ö", "&ouml;", $nachricht);
$nachricht = str_replace("Ö", "&Ouml;", $nachricht);
$nachricht = str_replace("ü", "&uuml;", $nachricht);
$nachricht = str_replace("Ü", "&uuml;", $nachricht);
$nachricht = str_replace("ß", "&szlig;", $nachricht);
$nachricht = str_replace("<", "<&nbsp;", $nachricht);
$nachricht = str_replace(">", ">&nbsp;", $nachricht);
$nachricht = str_replace("\r\n", "<br />", $nachricht);

$name = str_replace("ä", "&auml;", $name);
$name = str_replace("Ä", "&Auml;", $name);
$name = str_replace("ö", "&ouml;", $name);
$name = str_replace("Ö", "&Ouml;", $name);
$name = str_replace("ü", "&uuml;", $name);
$name = str_replace("Ü", "&uuml;", $name);
$name = str_replace("ß", "&szlig;", $name);
$name = str_replace("<", "<&nbsp;", $name);
$name = str_replace(">", ">&nbsp;", $name);

$eintrag = "INSERT INTO guestbook
(id, name, mail, nachricht, datum)

VALUES
('$id', '$name', '$mail', '$nachricht', '$datum')";

$eintragen = mysql_query($eintrag);

if($eintragen = true) {
?>
<p>Vielen Dank. Dein Eintrag wurde gespeichert...</p>
<p><a href="index.php">Zur&uuml;ck</a></p>
<?php
} else {
echo "Fehler im System. Konnte nicht gespeichert werden...";
}

mysql_close($verbindung);
}
}
?>
</body>
</html>
 
Wenn Du sowohl die PHP-Datei als auch die Ausgabe im Browser und die MySQL-Datenbank sowie die MySQL-Datenbankverbindung auf den Zeichensatz utf8 stellst, kannst Du auf solche Ersetzungskunststückchen auch verzichten.
 
Also die Datenbank ist auf UTF-8-general_ci eingestellt. In die PHP Datei muss ich doch oben nur zwischen <title> und <link css..> das einfügen "<meta http-equiv="content-type" content="text/html; charset=UTF-8"> einfügen oder? Und was meinst du mit Ausgabe im Browser? Wo kommt welcher Code hin? Oder geht das nur im Browser den ich benutze und jeder Besucher muss es so eingestellt haben?
 
wenn du auf UTF-8 bist, brauchst du zum Beispiel kein &auml; mehr schreiben, sondern kannst direkt ein 'ä' schreiben.

Und die ganzen str_replace() können dann raus, Sonderzeichen müssen nicht mehr ersetzt werden, so einfach ;)
 
Ja. Also muss ich oben nur <meta http-equiv="content-type" content="text/html; charset=UTF-8"> einfügen und schwubbs, sind die Probleme gelöst?
 
im Prinzip schon, wenn die Datenbank auf utf-8 ist, dein PHP Header auf utf-8 ist, und der zeichensatz der HTML Datei auf utf-8 ist, sollte es gehen.

so sollte alles gehen.

Wenn nicht einfach schreiben ^^
 
&& noch was, du kannst auch einfach folgendes machen, um die HTML Tags nicht ausführen zu lassen:

- strip_tags() / entfernt alle Tags: <html>lol</p> -> lol
-htmlspecialchars() / wandelt alle < & > in die entsprechenden Entities um: <html>lol</p> -> <html>lol</p> (aber der Code wird nicht ausgeführt)
 
Zurück
Oben