Ich habe ein Problem mit UTF-8. Das Skript unten soll dieses Problem deutlich machen.
ich möchte Formulareingaben in eine MySQL-Datenbank eintragen. Wenn ich das Skript mit header("content-type: text/html; charset=utf-8"); beginne, werden nicht-ISO-8859-1-Zeichen verschlüsselt, so dass diese den Platz von zwei Zeichen einnehmen (z.B. wird aus Jürgen Müller Jürgen Müller). Abgesehen davon, dass das zu unleserlichen Feldinhalten in meiner MySQL-Datenbank führt (wenn ich die Inhalte z.B. über phpMyAdmin bearbeiten möchte), sprengt dieses Verhalten auch mein Größenlimit für die Tabellenspalte. Im Beispiel ist die Spalte für name auf 30 Zeichen begrenzt. Werden 30 nicht-ISO-8859-1-Zeichen in das Formular eingegeben, werden die letzten 15 abgeschnitten, da ja jedes Zeichen nun den doppelten Platzbedarf hat. Wenn ich header("content-type: text/html; charset=utf-8"); weglasse, tritt dieses Verhalten nicht auf, aber muss ich den Header nicht immer schicken?
2. Frage: Ist es richtig, dass man bei Dokumenten in UTF-8 nicht-ISO-8859-1-Zeichen nicht mehr durch HTML-Entities ersetzen muss?
Vielen Dank!
ich möchte Formulareingaben in eine MySQL-Datenbank eintragen. Wenn ich das Skript mit header("content-type: text/html; charset=utf-8"); beginne, werden nicht-ISO-8859-1-Zeichen verschlüsselt, so dass diese den Platz von zwei Zeichen einnehmen (z.B. wird aus Jürgen Müller Jürgen Müller). Abgesehen davon, dass das zu unleserlichen Feldinhalten in meiner MySQL-Datenbank führt (wenn ich die Inhalte z.B. über phpMyAdmin bearbeiten möchte), sprengt dieses Verhalten auch mein Größenlimit für die Tabellenspalte. Im Beispiel ist die Spalte für name auf 30 Zeichen begrenzt. Werden 30 nicht-ISO-8859-1-Zeichen in das Formular eingegeben, werden die letzten 15 abgeschnitten, da ja jedes Zeichen nun den doppelten Platzbedarf hat. Wenn ich header("content-type: text/html; charset=utf-8"); weglasse, tritt dieses Verhalten nicht auf, aber muss ich den Header nicht immer schicken?
2. Frage: Ist es richtig, dass man bei Dokumenten in UTF-8 nicht-ISO-8859-1-Zeichen nicht mehr durch HTML-Entities ersetzen muss?
Vielen Dank!
Code:
<?php header("content-type: text/html; charset=utf-8"); $db = mysql_connect("localhost", "web007", "xyz"); mysql_select_db("usr_web007_1", $db); echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>"; echo "<html xmlns='http://www.w3.org/1999/xhtml' lang='de' xml:lang='de'>"; echo "<head><title></title><meta http-equiv='content-type' content='text/html; charset=utf-8' /></head><body>"; if ($_POST['senden']) { $name = trim($_POST['name']); if (!$name) $error[0] = " <span style='color:red'>Es wurde kein Name eingegeben!</span>"; if (!$error) { $sql = "CREATE TABLE IF NOT EXISTS namen ( id SERIAL, name VARCHAR(30) ) TYPE = MYISAM CHARACTER SET utf8"; mysql_query($sql,$db); $sql = "INSERT INTO namen (name) VALUES ('$name')"; mysql_query($sql,$db); echo "<p>Der Name ".stripslashes($name)." wurde eingetragen.</p>"; //echo "<p>Der Name ".stripslashes(htmlentities($name, ENT_QUOTES, UTF))." wurde eingetragen.</p>"; $sql = "SELECT * FROM namen WHERE id = ".mysql_insert_id(); $res = mysql_query($sql,$db); $ds = mysql_fetch_array($res); echo "<p>Beweis: ".$ds['name']."</p>"; //echo "<p>Beweis: ".htmlentities($ds['name'], ENT_QUOTES, UTF)."</p>"; echo "<p><a href='test.php'>Weiterer Eintrag</a></p>"; } } if (!$_POST['senden'] || $error) { echo "<form action='test.php' method='post'><div>"; echo "<input type='text' maxlength='30' name='name' />".$error[0]; echo "<br /><input type='submit' name='senden' value='Namen eintragen' /></div></form>"; } echo "</body></html>"; ?>
Kommentar