Dirk: String ins UTF-8 Format umwandeln

Hallo zusammen,

ich muss einen String ins UTF8 Format umwandeln, den ich anschliessend der Funktion

imagettftext($bild, 10, 0, 10, 20, $weiss, "arialbd.ttf", $hieristderstring);

übergebe. Das funktioniert auch alles, bis auf die Darstellung der Umlaute - da kommt nur Murks raus. Mir hat man gesagt, der String muss zwingend im UTF-8 Format sein. Nun habe ich das Formular, aus dem der String kommt, schon ins UTF-8 Format gesetzt:

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

Desweiteren bringt der Aufruf von
$_SESSION[hieristderstring] = utf8_encode($_POST[hieristderstring]);
auch nichts.

Wie komme ich da weiter? Bin ziemlich ratlos.

Dirk

  1. Hi,

    Wie komme ich da weiter? Bin ziemlich ratlos.

    speicherst Du Deine Datei im Editor denn auch als utf-8 ab? Sonst nutzt auch der Meta-Eintrag nix...

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
  2. Moin!

    ich muss einen String ins UTF8 Format umwandeln, den ich anschliessend der Funktion

    In welchem Format liegt der String denn vor dem allen vor? Das wäre wichtig zu wissen, ansonsten wandelst du nur wild herum, ohne zielgerichtet zu arbeiten.

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

    Das bringt dir gar nichts, wenn der Server einen anderslautenden HTTP-Header sendet. Hast du das geprüft?

    Was steht in <form accept-charset="">?

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. In welchem Format liegt der String denn vor dem allen vor? Das wäre wichtig zu wissen, ansonsten wandelst du nur wild herum, ohne zielgerichtet zu arbeiten.

      Da hab ich selber keine Anhnung. Hatte mit sowas noch nie zu tun. Wie finde ich das raus?

      Was steht in <form accept-charset="">?

      ist ebenfalls nicht definiert, also im form tag nicht angegeben.

      zu der anderen Frage:
      Ich schreibe mit Phase 5.4, ganz normal, ich weiss ehrlich gesagt nicht, wie man das einstellt, ändert und wozu man das braucht. Sorry.

      viele Grüße,
      Dirk

      1. Hello,

        In welchem Format liegt der String denn vor dem allen vor? Das wäre wichtig zu wissen, ansonsten wandelst du nur wild herum, ohne zielgerichtet zu arbeiten.

        Da hab ich selber keine Anhnung. Hatte mit sowas noch nie zu tun. Wie finde ich das raus?

        Was speichert denn Dein Editor ab?
        Das Problem ist, dass der Editor Dir "Klartext" anzeigt, die Kodierung für die Datei aber ganz anders sein kann. Wenn Du nun einen String, der vom Editor bereits als UTF-8 gespeichert wird, per Programm nochmals kodierst, kommt nur noch Quatsch dabei heraus.

        Was steht in <form accept-charset="">?

        ist ebenfalls nicht definiert, also im form tag nicht angegeben.

        Und dann solltest Du auch wissen, was Dein Server für eine Kodierung ausliefert.
        Die muss dann natürlich auch zur angegebenen passen.

        Da hilft auf die Schnelle immer wieder http://web-sniffer.net/

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

        1. Was speichert denn Dein Editor ab?
          Das Problem ist, dass der Editor Dir "Klartext" anzeigt, die Kodierung für die Datei aber ganz anders sein kann. Wenn Du nun einen String, der vom Editor bereits als UTF-8 gespeichert wird, per Programm nochmals kodierst, kommt nur noch Quatsch dabei heraus.

          Halt! Halt! Der String kommt direkt von einem Webformular, wird also über $_SESSION[hieristmeinstring] bzw. $_POST[hieristmeinstring] geliefert, nicht vom editor. Anschliessend soll er weiterverarbeitet werden, doch dafür muss er im UTF-8 Format vorliegen.

          Und dann solltest Du auch wissen, was Dein Server für eine Kodierung ausliefert.
          Die muss dann natürlich auch zur angegebenen passen.
          Da hilft auf die Schnelle immer wieder http://web-sniffer.net/

          Und der sagt:
          HTTP Request Header
          GET / HTTP/1.1[CRLF]
          Connection: close[CRLF]
          Accept-Encoding: gzip[CRLF]
          Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5[CRLF]
          Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3[CRLF]
          Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7[CRLF]
          User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6 Web-Sniffer/1.0.24[CRLF]
          Referer: http://web-sniffer.net/[CRLF]
          [CRLF]

          Mann ist das kompliziert...
          viele Grüße, Dirk.

          1. Moin!

            Was speichert denn Dein Editor ab?

            Deinen Phase 5 kannst du knicken, der kann kein UTF-8. Nutze am besten irgendeinen netteren Editor, der das kann. Diverse Programme bieten sich an (insbesondere auch welche, die eine freiere Lizenz haben, als Phase 5, den man ja für kommerziellen Einsatz lizensieren muß).

            Da hilft auf die Schnelle immer wieder http://web-sniffer.net/

            Und der sagt:
            HTTP Request Header

            Das ist das, was dein Browser zum Server schickt. Aber nicht das, was dein Server als Zeichencodierungsangabe zurück zum Browser schickt (damit der sich dann entsprechend verhalten kann.

            Mann ist das kompliziert...

            Es ist gar nicht kompliziert - jedenfalls dann nicht, wenn du grundsätzlich und überall auf UTF-8 setzt.

            Wenn du jedoch die Kodierungen wechseln mußt, dann wird es automatisch kompliziert, das ist richtig. Deshalb ist es eine extrem gute Idee, eben 100% auf UTF-8 zu bauen. Was dann leider die Nutzung von Phase 5 ausschließt.

            - Sven Rautenberg

            --
            "Love your nation - respect the others."
            1. Deinen Phase 5 kannst du knicken, der kann kein UTF-8. Nutze am besten irgendeinen netteren Editor, der das kann. Diverse Programme bieten sich an (insbesondere auch welche, die eine freiere Lizenz haben, als Phase 5, den man ja für kommerziellen Einsatz lizensieren muß).

              Kannst Du mir ein oder mehrere Beispiele nennen? Am Phase 5 find ich halt das highlighting und die Tagergänzung toll, die nutze ich regelmässig und da möchte ich nicht drauf verzichten. Auch die vorgegebenen Tags in der Shortcut Leiste benutze ich immer und immer wieder...

              Das ist das, was dein Browser zum Server schickt. Aber nicht das, was dein Server als Zeichencodierungsangabe zurück zum Browser schickt (damit der sich dann entsprechend verhalten kann.

              ok, dann hätten wir noch das, was drunter kommt, aber das finde ich jetzt weniger informativ:

              HTTP Response Header
              Name Value Delim
              HTTP Status Code: HTTP/1.1 200 OK
              Date: Tue, 18 Sep 2007 18:50:20 GMT CRLF
              Server: Apache/2.2.0 (Linux/SUSE) CRLF
              Last-Modified: Sun, 09 Sep 2007 23:05:23 GMT CRLF
              ETag: "4023d09-1f6-439bbe82132c0" CRLF
              Accept-Ranges: bytes CRLF
              Content-Length: 502 CRLF
              Connection: close CRLF
              Content-Type: text/html CRLF
              X-Pad: avoid browser bug CRLF

              Wenn du jedoch die Kodierungen wechseln mußt, dann wird es automatisch kompliziert, das ist richtig. Deshalb ist es eine extrem gute Idee, eben 100% auf UTF-8 zu bauen. Was dann leider die Nutzung von Phase 5 ausschließt.

              Nun gut, ich würde mir vielleicht überlegen, bei neuen Projekte auf UTF-8 umzusatteln.
              Aber wie löse ich denn nun mein Problem im konkreten Fall?

              viele Grüße,
              Dirk

              1. Hallo

                Das ist das, was dein Browser zum Server schickt. Aber nicht das, was dein Server als Zeichencodierungsangabe zurück zum Browser schickt (damit der sich dann entsprechend verhalten kann.

                ok, dann hätten wir noch das, was drunter kommt, aber das finde ich jetzt weniger informativ:

                Es enthält zwar keine Angaben zum Charset der Ausgabe des Servers, aber es ist das, was er zurückschickt (Response=Antwort).

                HTTP Response Header
                Name Value Delim
                HTTP Status Code: HTTP/1.1 200 OK
                Date: Tue, 18 Sep 2007 18:50:20 GMT CRLF
                Server: Apache/2.2.0 (Linux/SUSE) CRLF
                Last-Modified: Sun, 09 Sep 2007 23:05:23 GMT CRLF
                ETag: "4023d09-1f6-439bbe82132c0" CRLF
                Accept-Ranges: bytes CRLF
                Content-Length: 502 CRLF
                Connection: close CRLF
                Content-Type: text/html CRLF
                X-Pad: avoid browser bug CRLF

                Tschö, Auge

                --
                Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
                (Victor Hugo)
                <dingdong /><dingdong /><toc /><toc /><toc /><shout>Florence!</shout>
                Veranstaltungsdatenbank Vdb 0.2
                1. Hello,

                  Es enthält zwar keine Angaben zum Charset der Ausgabe des Servers, aber es ist das, was er zurückschickt (Response=Antwort).

                  Da müsste es dranhängen...

                  Content-Type: text/html

                  Dann ist es aber auch nicht verwunderlich, dass der Browser nicht weiß, was er anzeigen soll.

                  Es empfiehlt sich also, das default character Set anzugeben in der Konfiguraion,
                  oder es mittels .htaccess festzulegen,

                  http://httpd.apache.org/docs/2.0/mod/mod_charset_lite.html#charsetdefault

                  oder in jedem PHP-Script mit header() vorauszuschicken

                  http://www.php.net/manual/en/function.header.php

                  oder wenigstens die entsprechende Metaangabe zu machen

                  <meta http-equiv="content-type" content="text/html; charset=UTF-8">

                  Das tatsächlich verwendete muss dann natürlich auch dazu passen und die Datenbank, falls vorhanden, sollte auch darauf vorbereitet sein.

                  Harzliche Grüße vom Berg
                  http://bergpost.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

              2. Moin!

                Kannst Du mir ein oder mehrere Beispiele nennen? Am Phase 5 find ich halt das highlighting und die Tagergänzung toll, die nutze ich regelmässig und da möchte ich nicht drauf verzichten. Auch die vorgegebenen Tags in der Shortcut Leiste benutze ich immer und immer wieder...

                Ich persönlich habe lange Notepad2 genutzt, und bin jetzt zu Notepad++ übergegangen.

                Andere User hier im Forum finden andere Editoren nett. Das Archiv weiß sicher mehr, suche einfach mal nach "guter editor" o.ä. Begriffen in unserer Suche.

                ok, dann hätten wir noch das, was drunter kommt, aber das finde ich jetzt weniger informativ:

                Aber es ist entscheidend.

                Content-Type: text/html CRLF

                Der Server sendet keine Angabe zum Charset, also gilt das <meta>-Element.

                In dem Meta-Element legst du als Codierung UTF-8 fest.

                Und da du sonst nirgends im <form> ein accept-charset stehen hast, das etwas anderes sagt, wird der Browser dir lupenreines UTF-8 als Formulardaten schicken.

                Die dann nochmal in UTF-8 zu wandeln ist natürlich dann Blödsinn.

                Wenn du jedoch die Kodierungen wechseln mußt, dann wird es automatisch kompliziert, das ist richtig. Deshalb ist es eine extrem gute Idee, eben 100% auf UTF-8 zu bauen. Was dann leider die Nutzung von Phase 5 ausschließt.

                Nun gut, ich würde mir vielleicht überlegen, bei neuen Projekte auf UTF-8 umzusatteln.

                Dein Problem ist, dass dein Editor kein UTF-8 kann. Das ist nicht so wahnsinnig dramatisch, solange du alle Umlaute in auszugebendem HTML-Text schön als Entity schreibst. Aber sobald du das mal vergißt, oder was anderes als HTML ausgibst, wird es zu Verwirrungen führen.

                Einheitlichkeit in der Codierung ist wirklich wichtig. Deshalb empfehle ich auch jedem, der fragt, sowohl im HTTP-Header, als auch im Meta-Element, als auch im accept-charset im <form> die identische Angabe "UTF-8" zu machen, und folglich dann auch nur diese Codierung in allen Quelltextdateien zu benutzen.

                - Sven Rautenberg

                --
                "Love your nation - respect the others."