Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Probleme mit der Textdarstellung mit PHP erzeugt

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Probleme mit der Textdarstellung mit PHP erzeugt

    Hallo!
    Habe mir eine einfache Gästebuch Programmierung an meine Bedürfnisse angepaßt, klappt auch soweit, nur werden mir Umlaute usw. falsch dargestellt. Aber auch nur, wenn ich über den Browser mir diese Datei anzeigen lasse dann wird aus z.b. "Müller" -> "Müller". Wenn ich das mit dem FTP-Client Filezilla über meinen Texteditor öffne hab ich das Problem nicht. Das sind alles Einträge für den Import in eine Datenbank, die einzelnen Felder werden durch ein Apostroph getrennt, kann man - wenn jemand dieses Zeichen eingibt - dieses durch einen Code in z.b. Anführungsstriche oben umwandeln, wenn ja, wie geht das?

    Der Code:
    $datei = fopen("daten/texte.txt", "a");
    fwrite($datei, "\n".$eintrag);
    fclose($datei);

    und als Meta Tag:
    <meta charset="utf-8" />


    Habe mir schon einiges angeguckt und probiert über meine Suchmaschine,
    leider geht keine Lösung.

    Mir hat schon jemand wegen dem Problem mit "htmlentities" geholfen,
    die hatte ich dann entfernt und es was besser.

    Hab sogut wie keine Ahnung von PHP.

    Bitte um Hilfe.
    Vielen Dank schonmal
    Gruß
    Svein


  • #2
    Schau mal hier:

    - http://php-de.github.io/jumpto/faq/#html-charset

    Kommentar


    • #3
      Ist die Frage jetzt unabhängig von dem Umlaut-Problem?
      Zeichen kannst du generell z.B. mit preg_replace() ersetzen
      Die mysql_* Erweiterung ist veraltet!
      Besser: mysqli_* oder (noch besser) PDO

      Kommentar


      • #4
        probier mal das hier(ungetestet)
        PHP-Code:
        fwrite($fileiconv"UTF-8""ISO-8858-1//TRANSLIT"$content)); 

        Kommentar


        • #5
          Man löst UTF-8-Probleme nicht, indem man UTF-8 nach ISO-8859-1 umwandelt.

          Kommentar


          • #6
            Zitat von easyAnfaenger26 Beitrag anzeigen
            probier mal das hier(ungetestet)
            PHP-Code:
            fwrite($fileiconv"UTF-8""ISO-8858-1//TRANSLIT"$content)); 
            Hallo!

            hab meine Zeile:
            fwrite($datei, "\n".$eintrag);
            durch
            fwrite($datei, iconv("UTF-8", "ISO-8858-1//TRANSLIT", $eintrag);

            leider geht dann nichts mehr.
            trotzdem Danke
            Gruß

            Kommentar


            • #7
              @mermshaus: Da hast du natürlich Recht und ich habe glatt übersehen,dass das Problem bei der Browserausgabe besteht:

              Vielleicht klappt es wenn du alles vorher mit utf8_decode() ausgibst.

              Mit 'Müller' geht es jedenfalls...

              PHP-Code:
              header('Content-Type: text/html; charset=utf-8');
              $output=  utf8_decode('Müller');
              echo 
              $output

              Kommentar


              • #8
                Uah, das wird jetzt aber kompliziert.

                Das funktioniert, weil das ein UTF-8-String in einer ISO-8859-1-Repräsentation ist, der in einer in UTF-8 kodierten Quellcode-Datei steht.

                utf8_decode nimmt in dem Fall die beiden UTF-8-Zeichen "Ã" und "¼" (0xC383 und 0xC2BC) und formt die in die ISO-8859-1-Zeichen "Ã" und "¼" (0xC3 und 0xBC) um, die dann als UTF-8 interpretiert das "ü" (0xC3BC) ergeben.

                Das ist cruel and unusual.

                Beitrag #2 hilft nicht?

                Edit: Man könnte auch sagen, dass das ein ISO-8859-1 "Müller" ist, das zweimal nach UTF-8 umkodiert wurde. Es wird dann eben per utf8_decode einmal wieder zurückkodiert, wodurch es dann zu einmal UTF-8, also UTF-8, wird.

                Und womöglich ist das hier sogar eine Lösung, aber keine Lösung.

                Kommentar


                • #9
                  Hallo

                  hab ich gemacht und einmal so verändert:

                  header('Content-Type: text/html; charset=UTF-8');
                  $datei = fopen("daten/antraege.txt", "a");
                  fwrite($datei, "\n".$eintrag);
                  fclose($datei);

                  und das andere mal die header Zeile unter die $datei... Zeile

                  beides hat nicht das mit den Umlauten beseitigt.

                  Gruß
                  Sven

                  Kommentar


                  • #10
                    Mit [MAN]iconv[/MAN] wird es zwar funktionieren, aber es ist im Sinne von BestPractice falsch. Daten sollten durchgängig in UTF8 gehalten werden. Man muss eben auch einen Texteditor verwenden, der UTF8 kann und die Daten entsprechend korrekt ausgibt.
                    Standards - Best Practices - AwesomePHP - Guideline für WebApps

                    Kommentar


                    • #11
                      Zitat von rkr Beitrag anzeigen
                      Mit [MAN]iconv[/MAN] wird es zwar funktionieren, aber es ist im Sinne von BestPractice falsch. Daten sollten durchgängig in UTF8 gehalten werden. Man muss eben auch einen Texteditor verwenden, der UTF8 kann und die Daten entsprechend korrekt ausgibt.

                      Hallo!

                      Also mit meinem Texteditor klappt es ja aber beim Aufruf mit
                      zwei Browsern (Firefox und Chromium) geht es mit den Umlauten
                      nicht und die sollten doch eig. UTF8 richtig darstellen sollen, denke ich.

                      Gruß
                      Sven

                      Kommentar


                      • #12
                        Nein, nicht aus dem Stand.

                        Du kannst dem Browser via meta-tag oder via header() mitteilen, dass deine Inhalte UTF8 kodiert geliefert werden.
                        http://www.gerd-riesselmann.de/softw...f-8-ausliefern
                        Standards - Best Practices - AwesomePHP - Guideline für WebApps

                        Kommentar


                        • #13
                          (Siehe noch mein Edit, ich wollte über easyAnfaenger26s Post auch nicht einfach so drüberbügeln, sorry. Ich sehe auch gerade erst, dass es ums Schreiben geht und nicht ums Lesen?)

                          Könntest du mal in einem Hexeditor gucken, als welche Bytes ein "Müller" (also speziell der Umlaut) in deiner Text-Datei steht?

                          Wenn das nicht zu lang ist und keine privaten Daten enthält, geht auch einfach:

                          PHP-Code:
                          var_dump(bin2hex(file_get_contents('daten/antraege.txt'))); 

                          Kommentar


                          • #14
                            Problem mit dem UTF8 gelöst

                            Hallo!

                            Es lag doch am Browser, man muß dem Firefox jedesmal
                            die Unicode unter Zeichenkodierung angeben, weil er
                            dummerweise standardmäßig Westlich nimmt.
                            Aber damit kann ich leben.

                            Danke an alle
                            Gruß
                            Sven

                            Kommentar


                            • #15
                              Zitat von sveinw Beitrag anzeigen
                              Es lag doch am Browser,
                              Der Browser hat bestimmt nicht schuld. Wenn er keine Informationen bekommt, dann muss er eben irgendwelche Annahmen treffen.
                              Zitat von sveinw Beitrag anzeigen
                              man muß dem Firefox jedesmal
                              die Unicode unter Zeichenkodierung angeben, weil er
                              dummerweise standardmäßig Westlich nimmt.
                              Diese Informationen werden gewöhnlich per header übermittelt, z.B.
                              PHP-Code:
                              header('Content-Type: text/html; charset=UTF-8'); 
                              Es ist zwar schon alles gesagt worden, hier nochmal eine Zusammenfassung zu UTF-8 und Umlautproblemen

                              Zitat von Aus PHP.de Beiträgen
                              Nutze konsequent UTF-8. Kurze Checkliste für UTF-8 und Umlautprobleme:
                              - HTTP Header Content-Type mit UTF-8
                              - in HTML-Seiten <meta http-equiv="content-type" content="text/html; charset=utf-8" />
                              oder <meta charset="utf-8"><!-- HTML5 -->
                              sollte idealerweise als Erstes, gleich nach dem einleitenden head-Element erfolgen
                              - PHP und HTML/Template Dateien im Editor als "UTF-8 ohne BOM" speichern
                              - Formulardaten in UTF-8 übergeben (ggf. mit accept-charset="utf-8" sicherstellen)
                              - Datenbank Zeichensatz UTF-8, Tabellenkollationen utf8_general_ci o.Ä.
                              - Datenbankverbindung von PHP zu MySQL auf UTF-8 stellen
                              - Daten aus Fremdquellen müssen in UTF-8 überführt werden, wenn sie nicht als UTF-8 vorliegen
                              utf8_encode: ISO-8859-1-Zeichenkette -> UTF-8
                              - htmlentities codierung mitgeben, Beispiel: htmlentities($info,ENT_NOQUOTES,'UTF-8');
                              - für deutsche Monatsnamen wie März ist u.U. setlocale(LC_TIME, "de_DE.utf8") notwendig
                              Diagnosetipps:
                              Erscheinen ��� statt der erwarteten Umlaute äöü, dann werden oft ISO 8859-1 codierte Zeichen im Browser als UTF-8 interpretiert.
                              Mögliche Ursache:
                              Für den Header/Metatag ist charset=UTF-8 gesetzt, die Seiten sind jedoch nicht als UTF-8 gespeichert
                              oder die Zeichen stammen aus einer nicht UTF-8 Fremdquelle (Datenbank, Datei, Window-System..)

                              Erscheinen Ausgaben wie ä ö ü für ä ö ü, dann werden oft UTF-8 codierte Zeichen als ISO 8859-1 interpretiert.
                              Mögliche Ursache:
                              Fehlender oder falscher Header/Metatag. Ein header('Content-Type: text/html; charset=UTF-8'); im PHP-Script löst
                              in vielen Fällen schon das Problem.
                              Oder eine sog. Überkodierung: header und Zeichen UTF-8, irgendwo ein utf8_encode zuviel.
                              PHP-Klassen auf github

                              Kommentar

                              Lädt...
                              X