Hallo ihrs,
ich weiß, dass dieses Thema im Internet schon zig millionen Male durchgekaut wurde. Ich verzweifel allerdings gerade daran, Sonderzeichen über PHP in eine MySQL-Tabelle zu kriegen.
Zur DB-Struktur:
- Tabelle, sowie einzelne Spalten haben als Collation "utf8_general_ci).
- Die Spalte, in der die Sonderzeichen hinzugefügt werden sollen, ist vom Type "Text".
Zu den php-Dateien:
- alle Dateien auf dem Webserver sind UTF-8 kodiert (ohne BOM)
- im HTML-Header ist der meta-Tag mit dem Charset "UTF-8" vorhanden
- bevor Daten in die DB geschrieben werden, führe ich ein mysql_query('SET NAMES "utf-8"); aus
Wenn ich nun den Befehl INSERT INTO table(column) VALUES("ä"); aus einer php-Datei heraus an die DB sende, wird in der DB nur "ä" eingefügt.
Das Ganze klappt allerdings nur auf dem Webserver im Internet nicht.
Auf meinem lokalen Webserver funktioniert das Eintragen hingegen korrekt.
Wenn ich allerdings auf dem Webserver im Internet die SQL-Query über PHPMyAdmin abschicke, sind die Werte korrekt.
Was mache ich falsch?
VG
hotte
Ankündigung
Einklappen
Keine Ankündigung bisher.
[Erledigt] UTF-8 und die ewigen Probleme
Einklappen
Neue Werbung 2019
Einklappen
X
-
[Erledigt] UTF-8 und die ewigen Probleme
Stichworte: -
-
So. Ich habs nun endlich hinbekommen:
Und zwar mit folgender mysql_query:
mysql_query("SET NAMES SET 'utf8'");
mysql_query("SET character_set_client = 'utf8'");
mysql_query("SET character_set_connection = 'utf8'");
Danke für eure Hilfe
VG
-
Zitat von hotte Beitrag anzeigenFolgender php-Code schreibt ein korrektes Sonderzeichen in die Tabelle:
PHP-Code:$sql = 'INSERT INTO $cfg['mysql']['table'](title) VALUES("ä")';
Einen Kommentar schreiben:
-
Zitat von ChrisB Beitrag anzeigenUnd im phpMyAdmin hast du die Kodierung der Verbindung auch auf UTF-8 eingestellt ...?
Einen Kommentar schreiben:
-
Zitat von hotte Beitrag anzeigenNa ich lade PhpMyAdmin und lass mir die Einträge anzeigen.
Einen Kommentar schreiben:
-
Zitat von mimomamu Beitrag anzeigenEs scheint als ob du Daten explizit UTF-8-kodierst. Wenn die Daten bereits in UTF-8 vorliegen, dann führt eine erneute Kodierung zu dem von dir beobachteten Effekt.
Folgender php-Code schreibt ein korrektes Sonderzeichen in die Tabelle:
<?php
$mycon = mysql_connect($cfg['mysql']['host'], $cfg['mysql']['username'], $cfg['mysql']['password']);
if (!$mycon) {
die('Verbindung fehlgeschlagen.');
}
mysql_select_db($cfg['mysql']['database'], $mycon);
$sql = 'INSERT INTO $cfg['mysql']['table'](title) VALUES("ä")';
$res = mysql_query($sql, $mycon);
if (!$res) { die('Ungültige Abfrage.';}
?>
Wie ihr seht, steht da nix mit Umcodierung in UTF-8. Die Datei hab ich in Windows erzeugt und liegt somit im ANSI-Format vor.
Sehe ich das richtig, dass MySQL ankommende Daten bevor sie in die DB eingetragen werden, mit der entsprechend angegebenen Collation der Spalte konvertiert?
Ich blick hier langsam net mehr durch^^.
LG
Einen Kommentar schreiben:
-
Es scheint als ob du Daten explizit UTF-8-kodierst. Wenn die Daten bereits in UTF-8 vorliegen, dann führt eine erneute Kodierung zu dem von dir beobachteten Effekt.
Einen Kommentar schreiben:
-
Zitat von mimomamu Beitrag anzeigenDann bleibt ja nur noch die Frage unbeantwortet (deren Antwort mich übrigens auch brennend interessiert).
Ich sehe es im Übrigen auch, wenn ich die Tabelle wieder auf meiner Seite ausgeben lass. Alle Sonderzeichen, die über phpMyAdmin eingetragen wurden, sind korrekt. "ur die Sachen, die ich über mein php-Skript laufen lasse stimmen nicht.
VG
Einen Kommentar schreiben:
-
Zitat von hotte Beitrag anzeigenDas Eintragen funktioniert damit nämlich auch nicht.Zitat von ChrisB Beitrag anzeigenWie kontrollierst du denn das, was in die DB eingetragen wurde?
Einen Kommentar schreiben:
-
Zitat von ChrisB Beitrag anzeigenWie kontrollierst du denn das, was in die DB eingetragen wurde?
Dass eine ggf. per HTTP im Content-Type-Header gemachte Angabe höhere Priorität hast, hast du berücksichtigt?
Ich habe nun in der entsprechenden PHP-Datei folgenden Befehl hinzugefügt:
header('Content-type: text/html; charset=utf-8');
War das richtig? Das Eintragen funktioniert damit nämlich auch nicht.
VG
Einen Kommentar schreiben:
-
Zitat von hotte Beitrag anzeigenWenn ich nun den Befehl INSERT INTO table(column) VALUES("ä"); aus einer php-Datei heraus an die DB sende, wird in der DB nur "ä" eingefügt.
Wie kontrollierst du denn das, was in die DB eingetragen wurde?
- im HTML-Header ist der meta-Tag mit dem Charset "UTF-8" vorhanden
Einen Kommentar schreiben:
Einen Kommentar schreiben: