René: Kleines UTF-8 Problem

Hallo,

Ich habe ein kleines PHP Problem ich verwende für meine PHP Seiten UTF-8 und wenn ich per Formular (Post) ein Sonderzeichen bekommt ist das automatisch in UTF-8. Zur auswertung benötige ich aber ISO-8859-1 mein Problem ist:
Wie kann ich überprüfen ob der gesendete String in UTF-8 ist?
Weil ist ja leider so das utf8_encode([UTF-8 String]) != utf8_encode([ISO-8859-1 String]) ist.

Ich bin mir sicher das es dafür eine einfach Lösung gibt. Ich habe schon mal so ein Skript in einem Anderen zusammenhang gesehen, aber nach einer Stunde googlen habe ich weder das beispiel noch eine andere Lösung gefunden.

Gruß,

René

  1. Hallo,

    schau mal in die Benutzerkommentare unter http://de.php.net/manual/de/function.utf8-encode.php.
    Dort gibt es mehrere Vorschläge für Funktionen zum Erkennen, ob eine Zeichenkette UTF8-kodiert ist oder nicht.

    Ciao,
    Andreas

    --
    "Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)
    1. Danke Andreas

      ich wuste doch das das einfach ist *g*

      René

    2. echo $begrüßung;

      schau mal in die Benutzerkommentare unter http://de.php.net/manual/de/function.utf8-encode.php.
      Dort gibt es mehrere Vorschläge für Funktionen zum Erkennen, ob eine Zeichenkette UTF8-kodiert ist oder nicht.

      Konkret habe ich dazu 3 Funktionen gefunden.

      migueldiaz at gennio dot com 14-Dec-2005 06:23 bringt bei var_dump(isUTF8('ä')); ein false. Der Autor versucht einen UTF8-String zu erkennen, indem er ihn noch einmal durch utf8_encode() schickt und dann ein ganz bestimmtes Zeichen darin erwartet. Das funktioniert nur mit einer begrenzten Auswahl von Zeichen. Die Bytefolge E8 A9 B1 (als ISO-8859-1 gelesen: 話, als UTF8: 話) liefert ein false. Ein C3 A4 (ISO-8859-1: ä, UTF8: ä) liefert true.

      http://iubito.free.fr 10-Mar-2005 08:57 testet nur, ob der String mit einer UTF8-BOM beginnt. Diese BOM ist für UTF8 nur für Dateien üblich und auch keine Pflicht. Einzelne Strings werden selten damit ausgezeichnet.

      Beide Autoren schwindeln also, wenn sie ihre Funktion "is"UTF8 nennen.

      bmorel at ssi dot fr 17-Feb-2004 10:22 ist nicht ganz so anmaßend und nennt sich seems_utf8 (scheint utf8 zu sein). Die Funktion kommt der Aufgabenstellung schon recht nahe. Der String wird Zeichen für Zeichen durchgesehen und die Prüfung bei ungültigen UTF8-Sequenzen abgebrochen.
      Es ist zwar recht ungewöhnlich, aber nicht gänzlich ausgeschlossen, dass eine UTF8-Sequenz in einem ansonsten nur aus ASCII-Zeichen (Bytewerte 0..127) bestehenden Text nicht als UTF8 interpretiert werden soll.
      Beispielsatz: "Das scharfe S ist als UTF8 kodiert und als ISO-8859-1 angezeigt als ß zu sehen."
      Die Aussage dieses Satzes geht verloren, wenn er als UTF8-kodiert interpretiert wird: "Das scharfe S ist als UTF8 kodiert und als ISO-8859-1 angezeigt als ß zu sehen."

      echo "$verabschiedung $name";

  2. Moin!

    Ich habe ein kleines PHP Problem ich verwende für meine PHP Seiten UTF-8 und wenn ich per Formular (Post) ein Sonderzeichen bekommt ist das automatisch in UTF-8. Zur auswertung benötige ich aber ISO-8859-1

    Wieso denn das?

    Wie kann ich überprüfen ob der gesendete String in UTF-8 ist?

    Der String ist in dem Encoding, dass im Formular mittels accept-charset-Attribut erlaubt wurde. Beachte die Anmerkungen in http://de.selfhtml.org/html/formulare/definieren.htm#zeichenkodierung.

    Weil ist ja leider so das utf8_encode([UTF-8 String]) != utf8_encode([ISO-8859-1 String]) ist.

    Tatsache ist, dass man leider nie zu 100% sicher sein kann, in welchem Encoding ein String vorliegt, wenn diese Angabe nicht parallel dazugeschrieben wird. Es gibt diverse Funktionen, die das erraten wollen, indem sie typische Buchstaben suchen, deren Encoding sich unterscheidet - aber eine wirklich sichere Erkennung ist das nicht.

    Ich bin mir sicher das es dafür eine einfach Lösung gibt. Ich habe schon mal so ein Skript in einem Anderen zusammenhang gesehen, aber nach einer Stunde googlen habe ich weder das beispiel noch eine andere Lösung gefunden.

    Es gibt keine einfache Lösung zum Erkennen des verwendeten Encodings.

    Aber es gibt einfache Lösungen, um ein bekanntes Encoding in ein anderes Encoding umzuwandeln. Beispielsweise iconv().

    Aber du solltest noch mal genauer erläutern, warum du in einer UTF-8-Umgebung plötzlich ISO-8859-1 benötigst.

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!