Hallo,
ich habe eine Website in HTML5 und UTF-8. Alles funktioniert soweit.
Wenn ich mir die Daten in PhpMyAdmin ansehe, werden die Umlaute und Sonderzeichen in dieser bekannten kryptischen Form angezeigt (Weiße Mäuse = Weiße Mäuse). Auch beim Exportieren bleibt das so. Die Ausgabe ist aber so, wie sie sein soll. Also alles gut! Wenn ich in PhpMyAdmin ein Wort mit Umlaut direkt eingebe, erfolgt als Ausgabe nur ein "?".
Ich musste nun auf einen neuen Server umziehen, dort ist es genau umgekehrt: Die kryptischen Zeichen werden auch so ausgegeben. Wenn ich die Umlaute direkt in PhpMyAdmin eingebe, funktioniert es.
Liegt das am Server, der PHP-Version, der Datenbank? Ich konnte keine wesentlichen Unterschiede feststellen.
Muss ich die Daten vor dem Aufspielen auf den neuen Server konvertieren? Wie? Ich kenne nur von ANSI zu UTF-8, hier ist es ja quasi UTF-8 zu UTF-8…
Danke für die Hilfe
Ankündigung
Einklappen
Keine Ankündigung bisher.
Zeichensatz UTF-8 und PhpMyAdmin
Einklappen
Neue Werbung 2019
Einklappen
X
-
Zeichensatz UTF-8 und PhpMyAdmin
Stichworte: -
-
Web Application with HTML and Steps.jpg
Originale Bildquelle ist MDN, (open source)..
Der Unterschied wird aus der Grafik ersichtlich.
Dein Kollege setzt bei Punkt 1 an, also das was als HTTP Response an den Client ausgegeben wird. Daher die Funktion mit dem header.
Du hingegen setzt bei Punkt 3 an, Die Verbindung von deiner Anwendung(Script in PHP) zur Datenbank.
Wenn du das so machen würdest wie dein Kollege bleibt dein Problem bestehen.
Alle 7 bezeichneten Punkte müssen in einheitlicher Kodierung vorliegen.
- 1 Likes
Einen Kommentar schreiben:
-
Das Eine ist die DB-Verbindung und das andere der HTTP Header. Wenn der Webserver nicht schon per se UTF-8 ausliefert, brauchst du beides.Geht das auch und wo ist dann der Unterschied?
Einen Kommentar schreiben:
-
ich bin's nochmal...
Ich habe jetzt in die connect-Datei, die auf jeder Website includiert wird, eine Zeile eingefügt
und so die Zeichenkodierung der Datenbankverbindung von latin auf utf8 geändert. Jetzt läuft auch mit der Ausgabe alles so, wie es zu erwarten war.PHP-Code:session_start();
$dbserver = mysqli_connect('db123456789.db.1and1.com','dbo12345','password12345','db12345') OR DIE ("Error: connect mysql");
mysqli_set_charset($dbserver, "utf8");
date_default_timezone_set('Europe/Berlin');
Ist das alles so korrekt??
Ein Kollege von mir, wo ich Zugriff auf seinen Server habe, hat das Ganze anscheinend so gelöst, dass er stattdessen einfach
eingefügt hat. Geht das auch und wo ist dann der Unterschied?PHP-Code:header('Content-Type: text/html; charset=utf-8');
Einen Kommentar schreiben:
-
Okay, danke! Ich war davon ausgegangen, dass eine UTF-Seite mit entsprechenden Meta-Angaben ausreichend ist. Werde mich nochmal damit befassen.
Einen Kommentar schreiben:
-
Die Datenbankverbindung hat eine Zeichenkodierung gesetzt, damit der Datenbankserver weiß, in welcher Kodierung er die Daten liefern und empfangen soll. Diese musst du natürlich auf UTF-8 setzen.Zitat von oriolus Beitrag anzeigenAber dann trotzdem noch 'ne dumme Frage: was bedeutet "Zeichenkodierung der Datenbankverbindung"?
oderPHP-Code:$db = new PDO("mysql:host=localhost;dbname=DB;charset=utf8");
PHP-Code:$db = new mysqli("localhost", "my_user", "my_password", "test");
$db->set_charset("utf8");
Ist sie das? Schon mal in den HTTP-Header geschaut, welche Kodierung da wirklich drin steht?Zitat von oriolus Beitrag anzeigenWenn die Formular-Seite korrekt in UTF-8 codiert und deklariert ist, müsste doch alles richtig übertragen werden?
Einen Kommentar schreiben:
-
Danke Euch beiden, langsam beginne ich den Unterschied zwischen Kollation/Zeichenkodierung zu verstehen...
Aber dann trotzdem noch 'ne dumme Frage: was bedeutet "Zeichenkodierung der Datenbankverbindung"?
Wenn die Formular-Seite korrekt in UTF-8 codiert und deklariert ist, müsste doch alles richtig übertragen werden? Wo liegt der Fehler zwischen dem Absenden und dem Schreiben in die DB?
Einen Kommentar schreiben:
-
Die Kollation ist dafür irrelevant. Was vor allem zählt ist die Zeichenkodierung der Datenbankverbindung und die Zeichenkodierung, die im HTTP-Header gesendet wird.Zitat von oriolus Beitrag anzeigenWenn ich über das Formular Daten in die DB (Kollation utf8_general_ci) schreibe, werden sie wie gesagt in dieser kryptischen Form abgespeichert. Die Ausgabe ist aber korrekt, daher war ich bis jetzt davon ausgegangen, dass das alles so seine Richtigkeit hat...
Einen Kommentar schreiben:
-
Du hast dir die Artikel und die weitergehenden Links nicht richtig durchgelesen oder einfach nicht verstanden.
DB muss als default charset utf8 haben.
Kollation ist nebensächlich, da das nur die Sortierreihenfolge darstellt. Wenn du da die falsche nimmst, die nicht zu deinem Zeichensatz passt, machst du das nur noch schlimmer.
Verbindung zur Datenbank muss auf utf8 gestellt werden.
Ist jetzt aber nichts, was in den Artikeln nicht auch erklärt wurde.
Einen Kommentar schreiben:
-
Danke für die Antwort!
Das klingt logisch, aber was ich nicht verstehe:
Ich habe eine Website (HTML5, UTF-8 ohne BOM, mit notepad++ erstellt, W3C validiert) mit einem Formular drauf. Wenn ich über das Formular Daten in die DB (Kollation utf8_general_ci) schreibe, werden sie wie gesagt in dieser kryptischen Form abgespeichert. Die Ausgabe ist aber korrekt, daher war ich bis jetzt davon ausgegangen, dass das alles so seine Richtigkeit hat...
Das ist übrigens auf zwei Servern so (z.B. 1und1), nur auf dem neuen halt nicht.
Mit Aufspielen meinte ich: Ich habe die Daten vom alten Server exportiert (als sql-Datei via PhpMyAdmin) und sie auf dem gleichen Weg in die DB auf dem neuen Server importiert.
Einen Kommentar schreiben:
-
An dieser Stelle sei noch auf die Artikel in der Wissenssammlung hingewiesen, die das Thema erörtern
https://php-de.github.io/jumpto/utf-8/
https://php-de.github.io/jumpto/mysql-and-utf8/
Einen Kommentar schreiben:
-
Nein, es ist nicht alles gut. Du hast offenbar Datenmüll in der Datenbank und durch einen Fehler bei einer Ausgabe oder Good Will des Browsers wird es in deiner Anwendung zufällig richtig dargestellt.Zitat von oriolus Beitrag anzeigenWenn ich mir die Daten in PhpMyAdmin ansehe, werden die Umlaute und Sonderzeichen in dieser bekannten kryptischen Form angezeigt (Weiße Mäuse = Weiße Mäuse). Auch beim Exportieren bleibt das so. Die Ausgabe ist aber so, wie sie sein soll. Also alles gut!
Weder noch. Es liegt an deinen Daten.Zitat von oriolus Beitrag anzeigenLiegt das am Server, der PHP-Version, der Datenbank? Ich konnte keine wesentlichen Unterschiede feststellen.
Welches "Aufspielen"? Hast du irgendwas gemacht, das du in deiner Beschreibung nicht erwähnt hast? Es gibt übrigens keine Kodierung ANSI. ANSI ist ein Normungsinstitut.Zitat von oriolus Beitrag anzeigenMuss ich die Daten vor dem Aufspielen auf den neuen Server konvertieren? Wie? Ich kenne nur von ANSI zu UTF-8, hier ist es ja quasi UTF-8 zu UTF-8…
Einen Kommentar schreiben:

Einen Kommentar schreiben: