Sebastian: Zeichensatz ermitteln?

Hallo,
 gibt es in PHP eine Möglichkeit, festzustellen, in welchem Zeichensatz ein String vorliegt (also iso-8859-1 oder utf-8...)? Bzw. kann ich feststellen, in welchem Zeichensatz die Eingaben ankommen ($HTTP_*_VARS)?

Vielen lieben Dank,
 Sebastian

  1. hi!

    wenn nicht explizit die codierung mitgeliedert wird (also z.b. einem xml-file), dann wirst du meines wissens nach auch nicht auf den zeichensatz schliessen können.

    ciao, stefan

    1. Wenn es nicht durch den String alleine geht, wird denn der charset bei <form>-Eingaben irgendwie an den Server mitgeteilt, so dass man das mit einem PHP-Script auslesen könnte?

      Liebe Grüße,
      Sebastian

      1. no! allenfalls, das: ENCTYPE = "multipart/form-data" | "application/x-www-form-urlencoded" | "text/plain"

        wo ist denn dein problem, sebastian?

        1. Hi,
          also mein Problem ist, dass ich einen UTF-8 String brauche, um damit weiterzuarbeiten. Nur weiß ich ja nicht, ob der Browser, der Daten an mein Script schickt, dass auch in UTF-8 erledigt. Denn falls er z.B. iso-8859-1 liefert, kann ich mein Script vergessen ;)

          Liebe Grüße,
          Sebastian

          1. was dir der browser schickt, ist egal. du tust einfach so, als ob das utf-8 wäre, und gibst es so weiter.

            1. Hi,

              was dir der browser schickt, ist egal. du tust einfach so, als ob das utf-8 wäre, und gibst es so weiter.

              aber es ist doch dann nicht utf-8, oder? Es geht konkret um diese Klasse: idnaconv.phlymail.de.

              Das geht einfach so? Wenn der Browser iso schickt, kann ich doch nicht einfach so tun, als sei es utf-8, das stimmt doch in der brechnung nicht... und außerdem muss doch der gleiche charset auch wieder rausgehen, sonst erscheint beim user ein falsches zeichen, da dieses ja in diesem speziellen fall nicht mit einem html entity codiert werden soll.

              Liebe Grüße,
              Sebastian

              1. Moin!

                Hi,

                was dir der browser schickt, ist egal. du tust einfach so, als ob das utf-8 wäre, und gibst es so weiter.

                Böse Falle, das. Das führt zu fast 100% zu unvorhersehbaren Ergebnissen, weil eine unglückliche Kombination aus ISO-8859-1-Zeichen durchaus auch gültige UTF-8-Zeichen sein können - nur dann eben komplett andere Zeichen bezeichnen.

                Das geht einfach so? Wenn der Browser iso schickt, kann ich doch nicht einfach so tun, als sei es utf-8, das stimmt doch in der brechnung nicht... und außerdem muss doch der gleiche charset auch wieder rausgehen, sonst erscheint beim user ein falsches zeichen, da dieses ja in diesem speziellen fall nicht mit einem html entity codiert werden soll.

                Wenn du dem <form> ein accept-charset="UTF-8" mitgibst, dann senden IE 5.5, IE 6.0, Netscape 6.2, Firebird 0.7 und Opera 6 das Formular tatsächlich als UTF-8-codiert ab. Habe ich mich unlängst persönlich von überzeugt (im Zuge von Forschungen für dieses Forum, was ja leider kein Eurozeichen annimmt). Netscape 4 kann das vermutlich nicht - den habe ich nicht getestet.

                Was die Zeichensatzangabe angeht: Opera 6 schickt im "content-type" die Zeichensatzangabe mit - als einziger der o.g. Browser. Alle anderen schicken nur "application/x-www-form-data" oder eben "multipart/form-data", ohne Charset-Parameter.

                Sofern du _wirklich_ sichergehen willst, wird dir nichts anderes übrig bleiben, als deinen vermeintlichen UTF-8-String auf Gültigkeit zu prüfen. Zumindest ein paar formale Parameter kann man ja testen, wenn man nicht gleich die gesamte definierte Unicodetabelle prüfen möchte. :) Siehe http://de.php.net/manual/en/function.utf8-encode.php, erster Userkommentar, Funktion "seems_utf8()" für 31-bit.

                - Sven Rautenberg

                1. Hi,

                  Vielen Dank für diese Infos. Ich werde es damit versuchen!

                  Liebe Grüße,
                  Sebastian