Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] UTF8 und EUR-Zeichen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] UTF8 und EUR-Zeichen

    Hallo

    vorweg, ich habe gesucht ... nicht nur hier.

    Meine Webseite ist utf8 kodiert. Wenn ich einen Eintrag in der DB speichern will muss ich den String mit utf8_decode decodieren und später beim Auslesen aus der DB wieder encodieren mit utf8_encode. Hat etwas damit zutun, dass noch eine andere alte Webseite mit ISO darauf zugreift und sonst entweder hier oder da die Umlaute nicht richtig dargestellt werden.

    Einzig das EUR-Zeichen macht mir Probleme, ich helfe mir vor dem Speichern mit $dummy=str_replace("€","& # 8 3 6 4",$Original);
    Dann $dummy=utf8_decode($dummy); und Eintrag in die DB. Gibt es da eine elegantere Möglichkeit?
    Meine Versuche mit iconv oder htmlentities brachten nie das gewünschte Ergebnis oder ich kapiere es nicht
    --
    Stephan

  • #2
    Das ist unsauber und sinnlos. Wenn du UTF-8 nicht verwenden kannst/darfst, solltest du es auch nicht verwenden. Und was machst du mit anderen Zeichen als das Euro-Zeichen? Willst du alle HTML-Entitäten für jedes Zeichen, das nicht in iso-8859-1 enthalten ist, einen Eintrag machen?

    Kommentar


    • #3
      Zitat von Asterixus Beitrag anzeigen
      Das ist unsauber und sinnlos. Wenn du UTF-8 nicht verwenden kannst/darfst, solltest du es auch nicht verwenden. Und was machst du mit anderen Zeichen als das Euro-Zeichen? Willst du alle HTML-Entitäten für jedes Zeichen, das nicht in iso-8859-1 enthalten ist, einen Eintrag machen?
      Danke für die schnelle Antwort. Du hast bestimmt Recht, da wird das Durcheinander immer größer.
      Ich verstehe das sowieso nicht: die DB hat lt. phpmyadmin utf8-kollation, die einzelnen Tabellen latin1_german1_ci.
      Z.Zt. steht also von alten Einträgen der ISO-Seite z.B. "Die Tüte trägt das €-Zeichen". Wenn ich das auf der neuen Seite anzeigen will, muss ich utf8_encode anwenden.
      Die neue Seite ist utf8-codiert, wenn ich hier den Satz in die DB eintrage, steht dort "Die Tüte hat das €-Zeichen". Aber auf der Webseite wird nach einer Abfrage wieder alles richtig angezeigt.

      Kommentar


      • #4
        Dann wirst du die neue Seite wohl auch iso-8859-1 encodet anzeigen lassen müssen oder die Datenbank einmalig putzen. Jedenfalls zählt das Tabellenencoding (Latin1 = iso-8859-1), aber die Daten in ihnen müssen bei Kodierungsänderung ggf. auch umkodiert werden.

        Kommentar


        • #5
          Zitat von Asterixus Beitrag anzeigen
          Dann wirst du die neue Seite wohl auch iso-8859-1 encodet anzeigen lassen müssen oder die Datenbank einmalig putzen. Jedenfalls zählt das Tabellenencoding (Latin1 = iso-8859-1), aber die Daten in ihnen müssen bei Kodierungsänderung ggf. auch umkodiert werden.
          Das hieße also, DB so belassen, alle Datensätze auslesen, mit utf_encode umwandeln und wieder in die DB schreiben? Das dürfte doch so funktionieren, bis auf das €-Zeichen, aber da kann man in einem Umwandlungsscript ja drauf reagieren.

          Kommentar


          • #6
            Was ist das denn für 'ne Geschichte? Dein Euro-Zeichen ist ja nicht irgendwie zufällig da. Wie ist es encoded - Latin1 kennt kein €?

            Kommentar


            • #7
              Zitat von Asterixus Beitrag anzeigen
              Was ist das denn für 'ne Geschichte? Dein Euro-Zeichen ist ja nicht irgendwie zufällig da. Wie ist es encoded - Latin1 kennt kein €?
              Ich meinte das:
              $ausDB=$row[Wort];
              $inDB=iconv("ISO-8859-15", "UTF-8", $ausDB);
              $aufgabe= "update Test set Wort='".$inDB."'";

              Kommentar


              • #8
                Bist du dir sicher für iso-8859-15? Das macht nämlich für ein Euro-Zeichen einen Unterschied, wenn ich mich recht erinnere. Jedenfalls müsste das so funktioniert, mal von der Notice abgesehen, die da wegen $row[Wort] entsteht.

                Es ist übrigens zwar logisch, aber ich habe den Eindruck, dass ich das besser doch erwähne: Teste das lokal, bevor du das auf dem Produktivsystem umsetzt.

                Kommentar


                • #9
                  Zitat von Asterixus Beitrag anzeigen
                  Bist du dir sicher für iso-8859-15? Das macht nämlich für ein Euro-Zeichen einen Unterschied, wenn ich mich recht erinnere. Jedenfalls müsste das so funktioniert, mal von der Notice abgesehen, die da wegen $row[Wort] entsteht.

                  Es ist übrigens zwar logisch, aber ich habe den Eindruck, dass ich das besser doch erwähne: Teste das lokal, bevor du das auf dem Produktivsystem umsetzt.
                  Aber natürlich, danke für die Unterstützung.

                  Stephan

                  Kommentar


                  • #10
                    Bist du dir sicher für iso-8859-15? Das macht nämlich für ein Euro-Zeichen einen Unterschied, wenn ich mich recht erinnere.
                    Ja, das €-Zeichen wird in ISO-8859-1 und ISO-8859-15 binär verschieden („an anderen Stellen“) kodiert. Eigentlich enthält ISO-8859-1 aber überhaupt kein €-Zeichen. Das ist beispielsweise Browsern aber egal. Die rendern das Byte x80 in ISO-8859-1 dennoch als €-Zeichen. (Ist aber trotzdem falsch.) ISO-8859-1 ist für Browser mehr oder weniger ein Alias von Windows-1252.

                    Spalten direkt in der MySQL-Datenbank „umkodieren“:

                    - http://www.bothernomore.com/2008/12/...encoding-hell/ (erstbester Suchtreffer)

                    Kommentar


                    • #11
                      Zitat von mermshaus Beitrag anzeigen
                      Ja, das €-Zeichen wird in ISO-8859-1 und ISO-8859-15 binär verschieden („an anderen Stellen“) kodiert. Eigentlich enthält ISO-8859-1 aber überhaupt kein €-Zeichen. Das ist beispielsweise Browsern aber egal. Die rendern das Byte x80 in ISO-8859-1 dennoch als €-Zeichen. (Ist aber trotzdem falsch.) ISO-8859-1 ist für Browser mehr oder weniger ein Alias von Windows-1252.

                      Spalten direkt in der MySQL-Datenbank „umkodieren“:

                      - http://www.bothernomore.com/2008/12/...encoding-hell/ (erstbester Suchtreffer)
                      Problem hat sich erledigt - glaube ich.
                      Ich muss nur mit mysql_query("SET NAMES 'utf8'",$db); sagen, wie ich mit der DB kommunizieren will, das war alles, warum auch immer.

                      Danke
                      Stephan

                      Kommentar

                      Lädt...
                      X