Umlaute mit UTF-8 die 5920.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Umlaute mit UTF-8 die 5920.

    Guten Abend allerseits,

    ich muss nochmal einen Thread betreffend den Umlauten aufmachen, weil ich gerade am verzweifeln bin und in der Suche finde ich nicht das Passende.

    Ich habe eine SQL Datei, welche ich per Notepad als UTF8 Datei abspeichere und dann in meine Datenbank importiere.
    Die enthaltenen Umlaute werden dann im PHPMyAdmin richtig angezeigt.
    Wenn ich jedoch in meinem eigenen PHP-Script die Daten auslese, bekomme ich Fragezeichen anstatt Umlauten.
    Dies kann ich mit htmlentities() verhindern.
    Aber dann kann ich die Einträge in meiner Administrations-Umgebung nicht mehr editieren. (Wenn ich das mache, kommen sie falsch in der DB an)

    Meine Voraussetzungen:
    Meine Datenbank hat die Collation utf8_general_ci, genauso wie die Tabelle und die einzelnen Felder.

    In meinem PHP Script steht als erstes: header('content-type: text/html; charset=UTF-8');
    und in den Meta Tags steht auch UTF-8.
    Der Server sendet auch UTF-8, was ich den Seiteninformationen im Firefox entnehme.

    Die entsprechenden Variabeln von MySQL:
    character_set_client utf8
    character_set_connection utf8
    character_set_database utf8
    character_set_filesystem binary
    character_set_results utf8
    character_set_server latin1
    character_set_system utf8
    character_sets_dir /usr/share/mysql/charsets/
    collation_connection utf8_unicode_ci
    collation_database utf8_general_ci
    collation_server latin1_swedish_ci

    Da habe ich keinen Einfluss drauf, weils nicht mein Server ist.
    Ich habe die zwei Variablen aber auch schon temporär in meiner SQL-Datei auf UTF8 gestellt, bevor ich die Daten importiert habe.
    Hat auch kein anderes Ergebnis geliefert.

    Ich probiere jetzt schon den ganzen Tag herum, aber es will einfach nicht funktionieren.
    Habe ich ein Brett vorm Kopf oder habe ich etwas Wesentliches übersehen?

    Würde mich wirklich freuen, wenn mir jemand helfen kann.

    Gruß,
    naitsab

  • #2
    Versuch mal über SET NAMES den Zeichensatz für die SQL Verbindung zu setzen.

    Zeigt Firefox dir unter Seiteninformationen UTF-8 an? Wenn ja, schau dir mal die Ausgabe mit einem Hex-Editor an und such mal nach den Entsprechungen in UTF-8. Die Hex Werte kannst du dir auch in PHP ausgeben lassen. Geh einfach die verschiedenen Punkte durch und such den Fehler.
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      danke für die Antwort.
      Das SET NAMES 'utf8' hat leider keine Veränderung gebracht.

      Ich habe mir die verschiedenen Ausgaben jetzt im Hex-Editor angeschaut. Die Codes sind unterschiedlich, z.B. für ein ä:
      Mein PHP Script (falsch): EF BF BD
      PHPMyAdmin (richtig): C3 A4

      Ich habe aber noch einen ganz wesentlichen Aspekt vergessen:
      Wenn ich mit meinem Script einen neuen Eintrag erstelle, dann wird dieser sowohl richtig im PHPMyAdmin, als auch in meinem Script angezeigt. Dann ist der Hexadezimal-Code identisch. (Auch C3 A4)
      Nur die importierten Einträge kann mein Script nicht anzeigen..

      Also muss bei der Importierung was schief laufen, aber nur was.
      Denn auch diese Datei habe ich mit dem Hex-Editor geprüft und der Code für ein ä ist identisch mit dem Code aus der PhpMA-Anzeige: C3 A4

      Kommentar


      • #4
        Seit wann kann Notepad UTF8?
        Wenn also Notepad als ISO speichert, und du als UTF8 importierst... na das kann doch nur schief gehen

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Original geschrieben von ghostgambler
          Seit wann kann Notepad UTF8?
          Datei > Speichern unter > Codierung > UTF-8

          Kommentar


          • #6
            Genau so ist es.
            die Datei stimmt ja auch.
            Ich habe mir sie ja mit dem hex-editor angeschaut und die Umlaute sind UTF-8 Standard konform.

            Kommentar


            • #7
              Welches Charset haben die Tabellen? (PMA zeigt es unter Struktur, "SHOW CREATE TABLE <tablename>;" zeigt es als CHARSET=...)

              Kann man das eigentlich irgendwo online sehen, gibt es eine URL zu der Seite?

              Kommentar


              • #8
                [...]
                ) ENGINE=MyISAM DEFAULT CHARSET=utf8

                Die Seite kann ich leider nicht zeigen, weil sie komplett mit htaccess geschützt ist.

                Ich habe aber einen Fehler beim Hex-Code ermitteln gemacht.
                Ich habe alles in eine Text-Datei reinkopiert und als UTF-8 Dokument gespeichert und dann mit dem Hex-Editor geöffnet. Klar, dass das dann UTF-8 ist.
                Ich habe den Text jetzt gleich in den Hex-Code Editor kopiert und festgestellt, dass der PHPMyAdmin gar kein richtiges UTF-8 ausgibt.
                Ein "ä" ist da einfach nur "E4", wobei es ja "C3 A4" sein müsste.
                Mein Script gibt "00" für die Fragezeichen aus, wo ein "ä" stehen müsste.

                Also werden die Daten beim Importieren irgendwie vom PHPMyAdmin umgewandelt.
                Ich habe einfach auf Importieren geklickt und bei Zeichencodierung der Datei "utf8" ausgewählt.
                SQL-Kompatibilitätsmodus ist "none".

                Muss ich da sonst noch was beachten?
                Die Datei, die ich importiere ist nach wie vor richtiges UTF-8.

                Kommentar


                • #9
                  Schlag C3A4 mal auf http://macchiato.com/unicode/encoding/ nach ...
                  Zuletzt geändert von onemorenerd; 26.01.2008, 18:32.

                  Kommentar


                  • #10
                    http://www.macchiato.com/unicode/convert.html
                    da bekomme ich ein "ä", wenn ich "C3 A4" eingebe. Vice Versa.

                    oder verwechsel ich da was?!
                    Zuletzt geändert von naitsab; 26.01.2008, 18:47.

                    Kommentar


                    • #11
                      Lass mal das Leerzeichen weg.


                      $> file {importfilename.ext}

                      könnte auch helfen.
                      Zuletzt geändert von onemorenerd; 26.01.2008, 18:53.

                      Kommentar


                      • #12
                        dann ist es illegal.
                        aber in meinem Hex-Editor steht doch "C3 A4" mit Leerzeichen.
                        Ich verstehe nicht ganz, was du mir sagen willst .

                        Was bewirkt "$> file {importfilename.ext}" und wo setze ich das ein?
                        Noch nie gesehen.

                        Kommentar


                        • #13
                          laut dem progi http://www.ltg.ed.ac.uk/~richard/utf-8.html kommts auch auf das leerzeichn hinaus.

                          Kommentar


                          • #14
                            @tyel: Guter Link. Ich habe endlich auch den wiedergefunden, den ich vorhin gesucht habe (und stattdessen dieses macchiato-Ding gepostet): http://www.decodeunicode.org/de/u+00e4/properties

                            @TO: file ist ein Linux-Kommadozeilentool. Es ermittelt u.a. das Encoding von Textdateien.
                            Worauf ich hinaus will ist folgendes: Deine Tabelle ist UTF-8, deine DB-Verbindung auch, deine Ausgabe auch. Wenn es dennoch falsch ausgegeben wird, muß es am Import liegen. Da du als UTF-8 importierst, muß es wohl am Rohmaterial liegen ... die Importmechanismen von PMA sind imho korrekt.
                            Zuletzt geändert von onemorenerd; 26.01.2008, 19:16.

                            Kommentar


                            • #15
                              aber wenn ich meine .sql datei mit dem Hex-Editor aufmache, stimmt ja alles.
                              Ich habe am Anfang "EF BB BF" und ein ä ist ein "C3 A4".


                              Wenn es richtig gelaufen ist, muss doch sowohl im PhpMyAdmin, als auch in meinem Script das "ä" im Klartext erscheinen und wenn ich das dann kopiere und in den Hex-Editor einfüge, muss "E4" herauskommen.
                              Oder bin ich da auf dem Holzweg?

                              Kommentar

                              Lädt...
                              X