Umlaute problem

  • Bitte um Hilfe, Ich versteh es nicht :( und suche schon 2 Tage finde aber keine Lösung :(
    Ich habe 2 Systeme - "Online" (bei einem externen Hoster) und "Test" auf meiner QNAP TS-112 Box.


    Online:
    Betriebssystem: Linux (Linux dd18504 2.6.32-33-server #71-Ubuntu SMP Wed Jul 20 17:42:25 UTC 2011 x86_64)
    MySQL-Version: 4.1.22-nmm-1-log
    PHP-Version: 5.2.12-nmm2 Speicher: 64.00 MB


    QNAP:
    Betriebssystem: Linux (Linux Store05 2.6.33.2 #1 Mon Jul 18 06:00:01 CST 2011 armv5tel)
    MySQL-Version: 5.1.36-log
    PHP-Version: 5.2.14 Speicher: 256.00 MB


    Online-tabelle:
    Format dynamisch
    Kollation latin1_general_ci


    QNAP-tabelle:
    Format dynamisch
    Kollation latin1_general_ci


    Anzeige eines Datenbanktextes auf
    Online: ermöglicht
    QNAP: ermöglicht


    Wo und was muss ich auf QNAP (? oder auf meiner Webseite ?) konfigurieren, damit die Umlaute aus der Mysql-Tabelle richtig angezeigt werden?


    LG,

  • Das lieg an der falschen / ungleich eingestellten Zeichensatz deiner Datenbank


    Benutze wenn möglich auf beiden Systemen UTF-8


    bzw an der falschen Einstellung im HEAD deiner Webseite


    Code
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>


    sollte dann im HEAD stehen

  • Zitat von "bladekiller"

    Das lieg an der falschen / ungleich eingestellten Zeichensatz deiner Datenbank


    Wenn ich im phpMyAdmin auf die Datenbank und dann auf "Operationen" klicke steht bei Beiden (Online & QNAP) bei Kollation = "latin1_general_ci".
    Ich finde keine Unterschiede zwischen den beiden Datenbanken/Tabellen :(
    Wo kann ich denn noch suchen?


    Zitat von "bladekiller"

    bzw an der falschen Einstellung im HEAD deiner Webseite


    Heute steht dort (für beide) "charset=ISO-8859-1"


    Wenn ich "charset=UTF-8" testweise verwende, dann wir auf
    QNAP: Inhalt aus Mysql richtig dargestellt, aber normaler Text falsch :(
    Online: Inhalt und Mysql wird falsch dargestellt :(

  • Hallo bladekiller,


    Danke für Deinen Hinweis, aber wieso soll der mein Problem lösen?
    Wenn die Datenbank dann UTF-8 ist, dann muss ich doch auch JEDE php-Seite ändern und dort die Umlaute von z.B. ä in '&WCF_AMPERSANDä' ändern, oder?


    Darum verwende ich auch im Head <meta http-equiv='content-type' content='text/html; charset=ISO-8859-1' />.
    Dann ist Text - Online: richtig und Text - QNAP: richtig
    phpMyAdmin Tabelle - Online: richtig und phpMyAdmin- QNAP: richtig
    Feldinhalt auf Webpage - Online: richtig aber Feldinhalt auf Webpage - QNAP: falsch


    Irgendwas hab ich beim Anlegen der Datenbank auf QNAP falsch gemacht oder es wird bei meinem Hoster am Online System, eine Einstellung geändert, was ich nicht weiß und daher auch nicht auf QNAP ergänze.


    Liebe Grüße aus Wien sendet,

  • Richtig, die Qnap hat anscheinend in der DB einen falschen Eintrag,.... daher die Diskrepanz.


    Du musst deine Webseiten nicht ändern. du must in der DB auf der QNAP, die Einstellungen korrigieren.

  • :?: In allen von Dir markierten Feldern steht bei mir sowohl Online wie auch bei QNAP immer "latin1_general_ci". Wenn ich hier unterschiedliche Werte hätte, würde ich sofort verstehen warum die Umlaute falsch angezeigt werden, aber es steht auf beiden Servern in der DB, in jeder Tabelle, in jedem Feld immer "latin1_general_ci". :cry:

  • dann stell doch mal bitte seine Website in beiden Fällen auf
    latin1_general_ci
    um

  • Danke für Deine Geduld!
    Jetzt steht auf beiden Seiten
    <meta http-equiv='content-type' content='text/html; charset=latin1_general_ci' />
    keine Änderung zu vorhin: Text ist weiterhin richtig, Tabellen-Inhalt auf der Webseite ist leider wieder falsch

  • Zitat von "jannicars"

    probier's mal mit 'utf8_bin' hat danach bei mir geklappt.


    Als "<meta http-equiv='content-type' content='text/html; charset=utf8_bin' />" hat es leider keine Verbesserung/Veränderung gebracht.
    Bitte wo hast Du was bei Dir geändert?
    HTML? Datenbank? Kollation der MySQL-Verbindung? Tabelle/n? Felde/r?
    Liebe Grüße aus Wien sendet, Alexander

  • Ich habe die Kollation der MySQL Datenbank(NICHT Verbindung) in UTF8-bin geändert.
    Und an den Anfang jedes PHP Scriptes dies hier getan:

    Code
    header("Content-Type: text/html; charset=utf-8");
  • Hi,


    ist irgendwo etwas HTML Basics ;)
    Im Header geht natürlich auch, man sollte eigentlich ein bissl nach der w3c arbeiten.


    So etwas hier wäre immerhin XHTML valide:

    HTML
    <?xml version="1.0" encoding="utf-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="de"><head>   <title>BLUBB</title>   <meta http-equiv="Content-Style-Type" content="text/css" /></head><body>   <p>BLUBB</p></body></html>


    oder man gibt halt UTF8 als meta Tag an:


    Code
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />


    Damit es natürlich auch mit den Umlauten funktionier muss muss der Editor auch die Daten unter UFT8 speichern.
    Quelle:
    http://www.w3.org/International/O-charset


    Ob ich direkt die mysql Koalition auf UTF-8 stellen würde… Naja ;)
    Ruhig noch etwas herumexperimentieren.


    Grüsse, David

  • Spätestens wenn Du irgendwas vergisst auf "UTF8" zu wird man damit nicht wirklich viel Glück haben.
    Vom zeichensatz her (Unicode) natürlich das sinnvollste. UTF8 halt immer mitgeben, z.B. beim Dump.


    Schaue mal hier:
    http://dev.mysql.com/doc/refma…charset-unicode-sets.html


    Ob man binär oder via String matched. Ist je nach Anwendungsgebiet. Auf dem NAS bringt es keine wirklichen Vorteile.


    Grüsse, David

  • Hallo,


    ich nochmal. Ich denke das Problem hat nichts mit dem Mysql Server zu tun, sondern mit dem Apache bzw. den Locale des System.
    Bei Ausgabe der phpinfo(); steht alles auf en_US.utf8 und es sind auch gar keine anderen installiert. Diesem HowTo
    http://wiki.qnap.com/wiki/Country_Locale zufolge kann man weiter Locale einrichten. Das funktioniert auch soweit. Per export kann man nun die entsprechenden Environmentvariablen belegen, aber ich habe es noch nicht geschafft das mir phpinfo(); die Variable _ENV[LANG]=de_DE.utf8 dann auch anzeigt.
    Apache wurde neu gestartet.


    Gruß Fringel

  • Das glaube ich nicht ;)


    Es liegt schlicht daran, dass Ihr den Charset nicht mitgibt!
    Wenn Ihr auf den NAS eine DB & Tabelle anlegt, wird automatisch, falls nicht angegeben die DB unter der Koallition:

    Code
    utf8 -- UTF-8 Unicodeutf8_general_ci


    angelegt, was auch korrekt ist.


    Ich habe jetzt mal eine sehr simple PHP und einen myDQL-DUMP erstellt, damit da jeder durchblickt.
    Einfach das hier unter einer php Datei speichern:

    PHP
    <html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/></head><body><form method="post"><input type="text" name="inhalt" /></form>  </body></html><?php$data = $_POST["inhalt"];$dbhost = 'localhost';$dbuser = 'root';$dbpass = 'admin';$dbname = 'umlaut_test';$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Keine Verbindung zu der mySQL DB');mysql_select_db($dbname);if (!empty($data)){  echo "Eingabe: $data";  mysql_query("INSERT INTO text (text) VALUES ('$data')") or die(mysql_error());  }$result = mysql_query("SELECT id, text FROM text");while($row = mysql_fetch_object($result)){  echo "Result: $row->id = ";  echo $row->text;  echo "";}?>


    Sobald Ihr etwas in das Textfeld schreibt, wird es (nach einem Return) einfach zu der php Datei gepostet.
    php fügt dann diesen Datensatz hinzu und liest alle vorhandenen Datensätze mit aus.


    Hier ist der mySQL dump:

    Code
    /*Navicat MySQL Data TransferSource Server         : DATENSCHLEUDERSource Server Version : 50136Source Host           : localhost:3306Source Database       : umlaut_testTarget Server Type    : MYSQLTarget Server Version : 50136File Encoding         : 65001Date: 2011-09-19 01:20:40*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for `text`-- ----------------------------DROP TABLE IF EXISTS `text`;CREATE TABLE `text` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `text` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;-- ------------------------------ Records of text-- ----------------------------INSERT INTO `text` VALUES ('1', 'dad');INSERT INTO `text` VALUES ('2', 'äöüß');INSERT INTO `text` VALUES ('3', 'fafeea');INSERT INTO `text` VALUES ('4', 'fafeea');INSERT INTO `text` VALUES ('5', 'über den ');INSERT INTO `text` VALUES ('6', '*üäPÖß');


    So.
    Wenn Ihr einfach mal etwas in dem Textfeld reinschreibt (mit Umlauten).
    Dann schaut mal wie es in der mySQL aussieht. Dabei sieht man dann nämlich auch die Umlaute.


    Wenn Ihr ein paar Daten reingeschrieben habt, dann löscht mal die Zeile:

    Code
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>


    Das was Ihr dann seht dürften eure Umlaut Probleme sein ;)
    Zusätzlich werden die Umlaute (wenn ohne den Tag) was geschrieben wird in der DB "verstümmelt".


    Bei UTF8 gilt:
    1) Die mySQL Koallition muss auf UTF8 sein (was standardgemäss so ist).
    2) Der Client muss sich via UTF8 Connecten! z.B. der DUMP & eben der Browser (metatag)


    In der "Web Entwicklung" nutzt man heut zu Tage nur noch UTF8. Das heisst, es werden auch alle Dateien als UTF8 gespeichert // ggf. die IDE umgestellt.


    Eigentlich sind das sachen die nichts mit dem NAS zu tun haben, hoffe jedoch dass euch die Tipps mal helfen :thumb:


    Grüsse, David

  • Hallo Terz,


    vielen Dank für deine Geduld. :thumb: Du hattest in der Tat Recht!! Das Problem existiert an sich trotzdem, ist allerdings nicht auf dem NAS sondern auf dem VServer zu suchen. Ich habe jetzt mal danach gegoogelt und heraus gefunden, dass es ein Problem beim Migrationmanager gibt mit den Umlauten im Mysql. Mir ist das aber bisher nie aufgefallen, da ich mittels utf_encode/decode die Daten rein- und raus geholt habe. Auf dem NAS war es ja nun wirklich utf8 und deswegen die falschen Zeichen weil die umkodierung jetzt überflüssig ist. Tja in die falsche Richtung geschaut. Aber auch ohne alle Datenbanken auf dem VServer neu anlegen zu müssen, konnte ich es mit der Anweisung @mysql_query("SET NAMES 'utf8'", $meinDB); erstmal glatt ziehen.


    Gruß Fringel