utf-8, MySQL, Zeichenkodierung, hin und her... auf ein Neues!

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

  • utf-8, MySQL, Zeichenkodierung, hin und her... auf ein Neues!

    Hallo Freunde

    Auf meiner WebSite http://www.WeezerLinks.de wurden bisher die jeweiligen Inhalte einer Art selbstgebastelten CMS per 'include' eingebunden. Nachdem der Umfang und die Anzahl allmählich für mich unübersehbar und langsam immer schwerer zu 'händeln' wird, versuche ich nun diese include-Dateien in eine Datenbank zur weiteren Verwendung zu transferieren.

    PHP und MySQL ist für mich ein unendliches Spiel aus Trial & Error, man wächst bekanntlich mit den Aufgaben, aber erst wenn Sie erledigt ist, kommt der Wachstumsschub...

    Zwei Probleme habe ich schon ganz am Anfang...

    Alle Dateien werden zunächst in ein Array eingelesen. Klappt. Auch das Auslesen der einzelnen Datensätze aus dem Array zeigt die Texte so wie sie sein sollen. (Alle Texte liegen in utf-8 vor.)

    Die Datenbank wird, wenn Sie bereits Existiert zunächst gelöscht, um dann neu aufgebaut zu werden. Deshalb soll die richtige Konfiguration bereits im PHP-/SQL-Code getroffen werden.

    Beim Speichern der einzelnen Sätze in die DB bekomme ich überall da einen Abbruch, wo im Text ein Hochkomma, (bzw. ein einzelnes Anführungszeichen) verwendet wurde. In ca. 200 der Einzelparzellen habe ich bereits das Anführungszeichen durch '& p r i m e ;' ersetzt. Das sieht scheiße aus, und kann meiner Meinung nach nicht die Lösung sein.

    Die Inhalte, die bis dahin bereits in die DB Kopiert wurden, werden dort mit falschen Umlauten angezeigt.

    Mein Webspace wird bei 1&1 gehostet, auf diverse (PHP-, HTACESS, MySQL-) Konfigurations-Dateien habe ich keinen Zugriff (glaube ich). Im Prinzip habe ich aber auch keine Ahnung, und es dauert Tage, wenn ich nicht die Zeit und die Lust verliere bis ich irgendwie eher zufällig irgendwo eine Teillösung eingebaut habe.

    Gibt es hier jemand, der zu dieser Problematik oder zu einer korrekten Vorgehensweise in anfängerverständlicher Formulierung etwas sagen kann.

    viele Grüße
    Der Ochs vor'm Berg...
    HH.

  • #2
    lass bitte die Finger vom händischen Ersetzen von Hochkommas durch html-Code...

    man schreibt Strings in Varchar-Felder mit Hilfe der Funktion

    mysql_real_escape_string($string) - die sorgt dafür, dass sämtliche "gefährlichen" Zeichen escape-d werden (voranstellen von \, so dass ein Hochkomma eben nicht mehr die SQL-Zeichenkette beendet)

    nachdem du die Strings auf diese Art in der Datenbank unterbringst, holst du sie heraus und bereitest sie mit

    htmlspecialchars($datenbankstring,ENT_QUOTES) zur Ausgabe vor

    woraus schließt du , dass die Inhalte, die du bisher gespeichert hast, mit falschen Umlauten dargestellt werden ? etwa phpmyadmin ? der hat ne eigene Konfiguration, die du auch auf utf-8 stellen kannst bzw. müsstest
    [font=Verdana]
    Wer LESEN kann, ist klar im Vorteil!
    [/font]

    Kommentar


    • #3
      Ich versuchs zuerst mal mit Teil 1, einlesen... wird wohl 'n Tag dauern... MySQL/SQL-Syntax und Parameter sind mir ein Grauen. Ich muß mir immer erst Beispiele suchen, wie andere das machen.

      Damit Du siehst auf welchem ('Experten-')Niveau ich mich befinde zeige ich Dir meine Übergabe...

      Keine Ahnung, wie und wo ich da 'Deine' Funktion einsetze...

      Code:
      for($schleife=0; $schleife < $anzahlDatensaetze; $schleife++) 
      {
          $sql = "INSERT INTO WLCMS_Parz
              (info,anker,tags,kLink,contParz)
                  VALUES
              (
                  '".$info[$schleife]."',
                  '".$anker[$schleife]."',
                  '".$tags[$schleife]."',
                  '".$kLink[$schleife]."',                                    
                  '".$contParz[$schleife]."')";    
                  mysql_query($sql) OR die(mysql_error());
              }                                    
              
              @mysql_close($db_handler);
      Die Darstellung der Umlaute sehe ich per 'Adminer'-Programm. Ich habe in meinem Browser alle möglichen Zeichenkodierungen abgeklappert, keine Einstellung zeigt die Zeichen in einer vernünftigen Art und Weise an.

      HH.

      ...to be continued...



      Nachtrag:

      Ich habe gerade die neuste Version des 'Adminer' hochgeladen. Aus Version 2.xx wurde 3.01. Jetzt werden die gespeicherten Umlaute zumindest hier richtig dargestellt. Die, die ankommen, kommen also (offensichtlich) wenigstens schonmal richtig an...

      Ich habe noch nichts geändert.
      Zuletzt geändert von Zylobrax; 29.10.2010, 11:15. Grund: zwischenzeitlich neue Erkenntnisse

      Kommentar


      • #4
        na der Ansatz sieht doch gar nicht so übel aus ...
        - du musst nun nur die Datenwerte durch die Funktion mysql_real_escape_string "schicken" ...dann hätten wir diesen Teil
        PHP-Code:
        for($schleife=0$schleife $anzahlDatensaetze$schleife++) 
        {
            
        $sql "INSERT INTO WLCMS_Parz
                (info,anker,tags,kLink,contParz)
                    VALUES
                (
                    '"
        .mysql_real_escape_string($info[$schleife])."',
                    '"
        .mysql_real_escape_string($anker[$schleife])."',
                    '"
        .mysql_real_escape_string($tags[$schleife])."',
                    '"
        .mysql_real_escape_string($kLink[$schleife])."',                                    
                    '"
        .mysql_real_escape_string($contParz[$schleife])."')";    
                    
        mysql_query($sql) OR die(mysql_error());
        }                                    
        mysql_close($db_handler); 
        wie dein Adminer Tool die Umlaute darstellt ist weitgehend egal, hauptsache deine Webseite zeigt die vernünftig an.

        Dazu script in UTF-8 ohne BOM erstellen, header bei der HTML-Ausgabe von php auf text/html mit charset UTF-8, Datenbank auf utf-8 , Collationen der Datenwerte auf utf8(bevorzugt utf8_general_ci), Zeichensatz der Datenbank-Verbindung(!) auf UTF8 [ als erste SQL-Query schickst du mysql_query("SET CHARACTER SET 'utf8'"); ] dann sollte der der Rest auch klappen
        Zuletzt geändert von eagle275; 29.10.2010, 11:07.
        [font=Verdana]
        Wer LESEN kann, ist klar im Vorteil!
        [/font]

        Kommentar


        • #5
          Danke schonmal vorab.

          Die Darstellung der Umlaute im Adminer scheint sich durch die neuste ProgrammVersion erledigt zu haben. (siehe Nachtrag, oben...)

          Dein praktisches Beispiel am 'lebenden Objekt' sieht vielversprechend aus. Die Nennung der Funktion allein hätte mir nicht weitergeholfen. Ich wünschte ich könnte solche 'Sachen' genauso wie Du aus dem Ärmel schütteln.

          Danke
          HH.


          Mal sehen wie es 'wirkt'. (...kann 'ne Stunde dauern...) HH.

          Kommentar


          • #6
            Zitat von Zylobrax Beitrag anzeigen
            Dein praktisches Beispiel am 'lebenden Objekt' sieht vielversprechend aus. Die Nennung der Funktion allein hätte mir nicht weitergeholfen.
            Sollte sie aber - in der Beschreibung im Manual gibt's neben der Erklärung, wofür sie da ist, auch Beispiele dazu, wie man die Funktion einsetzt.

            Und sowas zu lesen und damit auch zu verstehen, solltest du lernen, wenn du programmieren willst - und wenn du darin noch nicht fit bist, dann jetzt damit anfangen.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Danke Wahsaga

              Als Neuling in Eurem Forum habe ich eigentlich schon als allererstes mit diesem Hinweis gerechnet.

              Wie lange suchen hällst Du denn für angemessen, bevor ich meine Frage hier im Forum stellen darf?

              Für alles, was irgendwo geschrieben steht, gibt es Bibliotheken und Archive, aber auch da gibt es Bibliothekare und Archivare. Was war nochmal ein Forum? War das nicht ein Platz, wo man mit Gleichgesinnten und Interessierten Gedanken und Erfahrungen austauscht?

              Ist das wirklich die Voraussetzung unter der ich hier um Hilfe bitten darf, dass ich erstmal alle 12.000 Beiträge studiert haben muß? Wohlmöglich empfiehlst Du mir auch noch erstmal Google und die anderen 75 Foren abzuklappern...

              Willst Du dieses Forum überflüssig machen indem Du ausschließlich auf das Handbuch verweist oder mir erstmal einen Programmierlehrgang empfiehlst?

              Halte Dich bitte mit Deinen Vorschlägen zurück, solange Du nicht sicher sein kannst, wie Du den anderen einschätzen kannst. Es ist ein Merkmal vorgerückten Alters, dass man auf solche Äußerungen wie Deine zunehmend empfindlicher reagiert.

              Und immer und immer wieder das Selbe, wenn man neu in einem Forum ist.
              Wenn man erstmal ein paar Dutzend Beiträge und Kommentare abgeliefert hat, legt sich das zum Glück wieder...

              Warum immer wieder dieser Zauber... ?

              HH. (Sauer!)

              Kommentar


              • #8
                Mein Hinweis war konkret darauf bezogen, dass dir die Nennung der Funktion nicht ausgereicht hätte.

                Warum nicht?
                Du kannst sie im Manual direkt nachschlagen - dafür musst du nicht lange suchen.
                Und dann liest du dir durch, was da steht - viel mehr braucht es doch gar nicht.

                Zitat von Zylobrax Beitrag anzeigen
                Ist das wirklich die Voraussetzung unter der ich hier um Hilfe bitten darf, dass ich erstmal alle 12.000 Beiträge studiert haben muß? Wohlmöglich empfiehlst Du mir auch noch erstmal Google und die anderen 75 Foren abzuklappern...
                Was soll der Scheiß?
                Ich habe nicht gesagt, dass du erst mal alle Beiträge hier durchlesen sollst.

                Sondern nur, dass du dich zunächst selbstständig zu informieren versuchen sollst, wenn dir ein Stichwort genannt wird - das kann doch wohl keineswegs zu viel verlangt sein?

                Willst Du dieses Forum überflüssig machen indem Du ausschließlich auf das Handbuch verweist oder mir erstmal einen Programmierlehrgang empfiehlst?
                So ein Forum ist nicht der Ort, um jedem auf's neue die Grundlagen zu erklären - dafür gibt es Tutorials und Bücher.
                Und ja, wir erwarten, dass du dich damit erst mal selber beschäftigst.

                Halte Dich bitte mit Deinen Vorschlägen zurück, solange Du nicht sicher sein kannst, wie Du den anderen einschätzen kannst. Es ist ein Merkmal vorgerückten Alters, dass man auf solche Äußerungen wie Deine zunehmend empfindlicher reagiert.
                Jetzt hältst vor allem du dich bitte mal zurück.
                Ich habe dir lediglich gesagt, dass selber Informieren erst mal grundlegende Pflicht eines Fragers ist.
                Und wenn das Manual zu einer Funktion Beispiele hat, dann schaust du dir die erst mal an - das ist doch wohl selbstverständlich?

                Und dein Alter interessiert hier überhaupt nicht.


                HH. (Sauer!)
                Ziemlich grundlos.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar

                Lädt...
                X