Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Bitte helfen Profis: Ich bin am verzweifeln: UTF8 ????

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Japs
Nutzer/in
Nutzer/in
Beiträge: 1685
Registriert: 18.10.2004, 10:50

Beitrag von Japs » 20.07.2009, 18:17

Hallo,
also irgendwie bin ich am verzweifeln - ich habe alles bei mir auf UTF-8 gestellt:

DB = UTF-8 Unicode ( utf8 )
Zeichensatz / Kollation der MySQL-Verbindung = utf8_generali_ci
Kollation der einzellen Felder = utf8_generali_ci
Headerausgabe: <meta http-equiv="content-type" content="text/html;charset=utf-8">
.htaccess = AddDefaultCharset utf-8 / AddCharset utf-8 .php .css
Formular: <form accept-charset="utf-8" metho=.... </form>

Was vergessen ?

So wenn ich jetzt übe rein Formular Wörter mit Umlauten eintrage, dann steht folgendes in der DB:

1. Grossbuchstaben (Ä, Ü, Ö)
Ä
Ö
Ü

2. Kleinbuchstaben (ä, ü, ö)
ä
ö
ü

3. Sonderzeichen (ß)
ß

Frage: Sin das überhaupt die richtigen Zeichen bzw. die richtige Codierung bei UTF-8 ???? Blick echt nicht mehr durch :)

Gruß Dirk
Zuletzt geändert von Japs am 20.07.2009, 20:06, insgesamt 1-mal geändert.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 20.07.2009, 18:45

dann steht folgendes in der DB:
Wie findest du das heraus? Kommandozeile?

Characterset der Verbindung?

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 20.07.2009, 18:49

Japs hat geschrieben:So wenn ich jetzt über ein Formular Wörter mit Umlauten eintrage, dann steht folgendes in der DB:

1. Grossbuchstaben (Ä, Ü, Ö)
Ã&#8222;
Ã&#8211;
[&#8230;]
Frage: Sind das überhaupt die richtigen Zeichen bzw. die richtige Codierung bei UTF-8 ????
Solche Krüppeldoppel sind ein untrügliches Zeichen dafür, dass irgendwo die utf-8-Kodierung verschlampt und stattdessen iso-8859-1 verwendet wird.

Bist du sicher, dass über die Verbindung zur Datenbank utf-8 läuft? Was du unter &#8222;MySQL-Verbindung&#8220; angegeben hast, utf8_generali_ci, ist eine Sortierung für Daten.
Du musst den Verbindungszeichensatz explizit in der MySQL-Konfiguration einstellen oder für jede Verbindung neu setzen (per SQL mit set names utf8 oder in PHP über die API mit mysql_set_charset()). In den Datenbank-, Tabellen- und Spalten-Optionen findest du das nicht, diese sind unabhängig vom Datenaustausch mit der Anwendung; MySQL kann ohne weiteres utf-8-kodierte Daten in eine 8859-Tabelle schreiben (wobei allerdings Zeichen verloren gehen können) oder aus einer utf-8-kodierten Tabelle Daten 8859-kodiert an die Anwendung schicken.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Japs
Nutzer/in
Nutzer/in
Beiträge: 1685
Registriert: 18.10.2004, 10:50

Beitrag von Japs » 20.07.2009, 19:26

Ok thank's dann hab ich wohl echt noch ein Problem - denn ich müsste dann ja noch:

Code: Alles auswählen

mysql_query&#40;"SET NAMES 'utf8' COLLATE 'utf8_general_ci'"&#41;  

irgenwo unterbringen, aber wo genau bzw. wie genau ? Bei mir sieht mein DB - Verbindung nähmlich so aus:

Code: Alles auswählen

// instance the classes
$sql = new SQL;
$sql->connect&#40;$config&#91;'dbhost'&#93;, $config&#91;'dbuser'&#93;, $config&#91;'dbpass'&#93;, $config&#91;'dbdata'&#93;&#41;;
$smarty = new Smarty;
$smarty->template_dir = 'templates/';
$aURL = explode&#40;'/',$_GET&#91;'url'&#93;&#41;;
oder muß es hier:

Code: Alles auswählen

$query ="SELECT * FROM `ferienwohnung` WHERE &#40;Status=1 ";
auch noch danach eingefügt werden ?

Dachte nur an der Stelle, wo die Verbindung zur DB aufgebaut wird ?

Gruß Dirk

Japs
Nutzer/in
Nutzer/in
Beiträge: 1685
Registriert: 18.10.2004, 10:50

Beitrag von Japs » 20.07.2009, 20:53

Ok das Problem konnte ich lösen - jetzt werden die neuen Einträge unter UTF8 in die DB mit ü,ä,ö etc. eingetragen und auch so wieder ausggegeben - jetzt stehen also keine Ä Ö Ü so mehr in der DB.

Aber jetzt passen alle anderen alten Einträge nicht mehr.
Gibt es eine Möglcihkeit alle alten Einträge in der DB auf einmal in UTF8 zu konvertieren ?

Danke & Gruß Dirk

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 20.07.2009, 20:53

Das Einfachste wäre vermutlich:

Code: Alles auswählen

// instance the classes
$sql = new SQL;
$sql->connect&#40;$config&#91;'dbhost'&#93;, $config&#91;'dbuser'&#93;, $config&#91;'dbpass'&#93;, $config&#91;'dbdata'&#93;&#41;;
$sql->query&#40;'set names "utf8"'&#41;;
...
Oder schau nach, ob die SQL-Klasse selbst irgendwas in der Richtung unterstützt. Stellt sie die Verbindung zur Verfügung, benutze mysql_set_charset();

In jedem Falle muss das nur einmal nach Herstellen der Verbindung, also nach connect() gemacht werden.

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 20.07.2009, 21:01

Japs hat geschrieben:Gibt es eine Möglcihkeit alle alten Einträge in der DB auf einmal in UTF8 zu konvertieren?
Dazu musst du die betreffenden Spalten mittels ALTER TABLE in den Typ BINARY (VARBINARY) konvertieren und anschließend zurück nach CHAR (VARCHAR).

BINARY kennt keine Kodierung, bei der Umwandlung nach BINARY geht die alte, falsche Kodierungsinformation verloren und es bleiben nur die Bytes übrig. Bei der Rückwandlung in CHAR wird diesen Bytes die gewünschte Kodierung dann quasi aufgepropft, ohne dass sich an den Bytes etwas ändert - die Bytes lagen ja bereits richtig vor, lediglich die Information, was sie darstellen, war falsch.

Siehe https://dev.mysql.com/doc/refman/5.1/en ... rsion.html.

Nicht vergessen, vorher eine Sicherheitskopie der Tabelle anzulegen!

Japs
Nutzer/in
Nutzer/in
Beiträge: 1685
Registriert: 18.10.2004, 10:50

Beitrag von Japs » 21.07.2009, 08:58

Hallo,
Dazu musst du die betreffenden Spalten mittels ALTER TABLE in den Typ BINARY (VARBINARY) konvertieren und anschließend zurück nach CHAR (VARCHAR).
Also irgendwie hat sich da jetzt bei mir gar nix geändert - ich habe in der DB die betreffenden Spalten, welche generell auf "varchar" standen mal mit "BINARY (VARBINARY)" gespeichert und dann wieder zurück mit CHAR (VARCHAR) - aber eine Änderun konnte ich nicht feststellen ????

Gruß Dirk

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 21.07.2009, 10:40

Japs hat geschrieben:mal mit "BINARY (VARBINARY)" gespeichert und dann wieder zurück mit CHAR (VARCHAR) - aber eine Änderun konnte ich nicht feststellen ????
Was heißt &#8222;gespeichert&#8220;? Hast du alter table modify spalte varbinary(123456) und anschließend alter table modify spalte varchar(123456) ausgeführt? Und für die Spalte ist nach der Änderung auch utf8 als Zeichensatz eingestellt?

Japs
Nutzer/in
Nutzer/in
Beiträge: 1685
Registriert: 18.10.2004, 10:50

Beitrag von Japs » 21.07.2009, 10:59

Ich habs jetzt anders gemacht - ahbe die "alte DB" nochmals in die neue DB importiert und dabei UTF8 angegeben und siehe da - es werden alle Umlaute korrekt dargestellt :)

Jett passt es :)
Gruß & Dank Dirk

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag