Ankündigung

Einklappen
Keine Ankündigung bisher.

Codepages

Einklappen

Neue Werbung 2019

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

  • Codepages

    Hallo zusammen,
    darf ich hier mal eine Frage "Off Topic" stellen, da ich nicht weiß, wo ich sonst fragen könnte:

    Ich erstelle eine PHP/MySQL Website, die im ganzen EU Raum eingesetzt wird, d.h. die Seiten enthalten Umschaltmöglichkeiten für die verschiedenen Sprachen (DE, SK, FR, ...).

    Alle HTML-Seiten liegen in den verschiedenen Sprachversionen vor und enthalten Platzhalter, die von PHP befüllt werden. Diese Texte (Fehlermeldungen, etc) liegen in einem PHP Include, das anhand der gewählten Sprache eingebunden wird, sodaß auch diese in der gewählten Sprache ausgegeben werden.

    Wie soll ich nun die Codepages an den verschiedenen Stellen einstellen, damit jeder die Texte korrekt sieht:
    -> Codepage der HTML-Seite (charset=ISO-8859-?)
    -> Collation in der MySQL-DB (latin?_general_ci)
    Bei den HTML-Seiten ist ja noch das kleinere Problem: da kann ich ja die verwendete Codepage in den META Tags definieren.

    Aber wie ist es mit den Daten, die auf den Seiten interaktiv eingegeben und in die Datenbank gespeichert werden? Wenn z.B. ein Slowake einen Text mit einem kleinen z mit einem Accent (Code BE) in ISO-8859-2 eingibt, in die DB speichert und ein Deutscher diesen Text mit ISO-8859-1 abruft, erhält er das Zeichen 3/4.

    Gibt es eine Möglichkeit, daß alle Benutzer alle Texte immer korrekt sehen?

    mfG Franz

  • #2
    Wer denkt denn heute noch in ISO codes? Nimm UTF und fertig...?
    [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

    Kommentar


    • #3
      Sofern ich dein Problem richtig verstanden habe:
      du kannst deiner Datenbank sagen, mit welchem Charset sie arbeiten soll: http://dev.mysql.com/doc/refman/5.0/en/charset.html

      Wenn du mit PDO arbeitest, sieht das wie folgt aus: "mysql:host=$host;dbname=$db;charset=utf8"

      Kommentar


      • #4
        An UTF habe ich auch schon gedacht, ich bekomme jedoch alle Übersetzungen (HTML-Seiten, PHP-Include) anscheinend in ISO-Zeichensätzen, wo z.B. das slowakische z mit dem Häkchen drüber als BE (=190) daherkommt. Wenn ich diese Texte mit Codepage UTF-8 anzeige, stimmen die Sonderzeichen nicht. Diese müßten mit den jeweiligen HTML-Codes codiert sein.

        Wie kann ich die Texte umkonvertieren, damit die Sonderzeichen dann korrekt z.B. mit ä aufscheinen und korrekt unter UTF angezeigt werden?

        Die Datenbank selber ist nicht das Problem, da läßt sich die Collation ja einstellen.

        mfG Franz

        Kommentar


        • #5
          Zitat von lagraf Beitrag anzeigen
          Wie kann ich die Texte umkonvertieren, damit die Sonderzeichen dann korrekt z.B. mit ä aufscheinen und korrekt unter UTF angezeigt werden?
          Macht heute keiner mehr. ¨ sind veraltet. Konvertier die Dateien einfach in UTF, dann passt alles http://php.net/manual/de/function.mb...t-encoding.php
          [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

          Kommentar


          • #6
            Hat mit mb_convert_encoding funktioniert! Allerdings habe ich gesehen, daß man die Codierung kein zweites Mal drüberlaufen lassen darf, wenn später nochmal Texte ergänzt wurden!

            Da wäre es zu überlegen, ob man den Übersetzern nicht eine HTML-Seite anbieten sollte, wo sie den deutschen Text sehen, und die Übersetzung direkt in ein Feld eingeben, das man dann speichert. Dann wäre es kein Problem, da die Übersetzungen dann gleich in der richtigen Codepage vorliegen und man nicht jedesmal rausfinden muß, mit welchem Editor und welcher Codepage der Übersetzer arbeitet.

            Vielen Dank für die Antworten!
            Franz

            Kommentar


            • #7
              Diese Konvertierung kann bi-direktional stattfinden. UTF8->ISO // ISO->UTF8

              Kommentar


              • #8
                Ist klar, für Ergänzungen zuerst wieder zurückkonvertieren (oder ISO Original aufheben).
                mfG

                Kommentar


                • #9
                  Hallo zusammen,
                  jetzt muß ich den Thread doch nochmal öffnen:

                  Die Übersetzung der HTML-Templates funktioniert derzeit auf folgendem Weg:
                  - HTML-Seite an Übersetzer weiterleiten
                  - docx mit ISO-8859-2 für slowakisch kommt retour
                  - docx mit FreeEditor öffnen und als odt für OpenOffice speichern
                  - odt mit OpenOffice öffnen und als Text kodiert mit UTF-8 speichern
                  - HTML-Template und UTF-8 Text mit Dreamweaver öffnen
                  - Mit copy und paste die Übersetzungen ins HTML kopieren
                  - HTML speichern

                  Dabei ergeben sich folgende Probleme:

                  1) docx mit FreeEditor -> odt mit OpenOffice -> txt (kodiert) ist notwendig, weil OpenOffice beim Öffnen des docx nicht alle Sonderzeichen korrekt übernimmt. Daher öffnen mit FreeEditor, der hat allerdings keine Export Funktion in UTF-8, daher Export als odt. Danach öffnen mit OpenOffice, da beim odt die Sonderzeichen korrekt sind und speichern als txt kodiert.

                  2) Mit Dreamweaver per copy und paste die Übersetzungen ins HTML hineinkopieren ist ein Horror, da der übersetzte Text in slowakisch unleserlich ist, wenn man der Sprache nicht mächtig ist. Daher kann man sich nur an Interpunktion und anderen Formatierungen orientieren!

                  Das Ganze kommt dadurch zustande, weil die Übersetzer keinen HTML-Editor haben / wollen und daher die Texte in einer Wurst als docx rückliefern.

                  Ich suche nun nach einer Möglichkeit, die Texte zum Übersetzen so zu präsentieren, daß ich möglichst wenig nachträgliche Arbeit mit den Übersetzungen habe. Hat da jemand eine Idee, wie man automatisiert den deutschen Text einer HTML-Datei zur Verfügung stellen und die slowakische Übersetzung ohne oder mit wenig Aufwand wieder in eine HTML-Datei rückführen könnte ohne den Übersetzern HTML-Code zumuten zu müssen?

                  Wäre für jede Idee dankbar!

                  mfG Franz

                  Kommentar


                  • #10
                    Bau den Übersetzern doch eine kleine Web-Oberfläche, wo sie links den zu übersetzenden Text haben und rechts ein Eingabefeld.

                    Dann hast du hinten dran in der Datenbank 100% Kontrolle über alle Kodierungen etc.
                    [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

                    Kommentar


                    • #11
                      Diese Übersetzeroberfläche habe ich bereits für Fehlermeldungen, die ich per PHP ausgebe und für die Mailtexte, die kreuz und quer versandt werden.

                      Aber die HTML-Templates sind komplette HTML-Seiten, die ja nicht nur zu übersetzenden Text, sondern auch HTML-Code enthalten. Mit strip_tags könnte ich zwar den reinen Text aus den HTML-Seiten extrahieren, aber die Übersetzung kriege ich dann nicht mehr vernünftig in den HTML-Code zurück.

                      Man bräuchte da so eine Art Funktion str_replace("deutscher Text", "slowakischer Text", HTML-Page).

                      mfG Franz

                      Kommentar


                      • #12
                        Ich hoffe, du hast in den Template so oder so nur Platzhalter, die du zur Laufzeit auswechselst?

                        Mittels einer handelsüblichen Template-Engine (Twig?) kannst du dann die benötigten Sprachinformationen aus der DB holen und einfügen.
                        [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                        Kommentar


                        • #13
                          Um es auch zumindest mal genannt zu haben: https://de.wikipedia.org/wiki/GNU_gettext

                          Kommentar


                          • #14
                            ChristianK:
                            Vor den Platzhaltern bin ich bisher noch zurückgeschreckt, da damit das Gestalten der HTML-Seiten im Wysiwyg Editor etwas schwieriger ist da man das fertige Layout erst im Browser wirklich sieht. Außerdem sollte man dann dem Übersetzer eine Oberfläche anbieten, die alle Platzhalter schön untereinander darstellt, damit er auch den Zusammenhang sieht (und nicht nur jeden Platzhalter für sich).

                            mermshaus:
                            Im PHP-Code habe ich keinerlei User-Text mehr. Alle Meldungen, welche die Module ausgeben, sind bereits in der DB nach Sprachen abgelegt und werden vom PHP entsprechend gelesen und angezeigt.

                            Kommentar

                            Lädt...
                            X