Andi: Zeichensatzprobleme

Hallo,

ich sende an ein PHP Script via GET Daten. Der String kommt dort als UTF8 an, was mir Umlaute zerstört.

PHP & Transfer Encoding sind iso-8859-1

Trotzdem kommt der String als UTF8 an.

Mit uft8_decode kann ich den String zwar wieder in einen ISO String verwandeln, doch nicht alle Server sind da Gelich. Und wenn ich dann eine ISO String erhalten und den mit utf8_decode umwandle stimmts wieder nicht.

Man muß dazu sagen daass mein Rechner UTF8 als Standardzeichensatz eingestallt hat, PHP aber ISO-8859-1 und Transfer-Encodeing mit ISO-8859-1 Configuriert sind.

Warum wird nicht ISO-8859-1 gesendet wenn dieser Zeichensatz als Default eingestellt ist?

Grüße, Andi

  1. ich sende an ein PHP Script via GET Daten. Der String kommt dort als UTF8 an, was mir Umlaute zerstört.

    Vermutlich via Browser, der angewisen worden ist eine "Seite" als UTF-kodiert zu betrachten bzw. azuzeigen.

    PHP & Transfer Encoding sind iso-8859-1

    Trotzdem kommt der String als UTF8 an.

    Weil der Browser UTF sendet.

    Mit uft8_decode kann ich den String zwar wieder in einen ISO String verwandeln, doch nicht alle Server sind da Gelich. Und wenn ich dann eine ISO String erhalten und den mit utf8_decode umwandle stimmts wieder nicht.

    Das hört sich nicht gut an, warum weist Du den (die) Browser nicht an ISO-8859-1 zu verwenden?

    Man muß dazu sagen daass mein Rechner UTF8 als Standardzeichensatz eingestallt hat, PHP aber ISO-8859-1 und Transfer-Encodeing mit ISO-8859-1 Configuriert sind.

    PHP kann doch UTF.

    Warum wird nicht ISO-8859-1 gesendet wenn dieser Zeichensatz als Default eingestellt ist?

    Senden tut der Server, dann weise diesen doch an über entsprechende Headerdaten und Meta-Angaben und entsprechende Vorarbeit ISO-8859-1 zu senden.

    Ist doch alles easy, ich weiss nicht so recht woran es hapert.

  2. echo $begrüßung;

    ich sende an ein PHP Script via GET Daten. Der String kommt dort als UTF8 an, was mir Umlaute zerstört.

    Du beschreibst das Problem leider nicht sehr nachvollziehbar. Hast du es mal mit einem Minimal-HTML-Dokument nachgestellt? Wie sehen die HTTP-Header aus, wen der Server dieses ausliefert? Besonders interessiert da die eventuell vorhandene charset-Angabe im Content-Type-Header. Welche Browser betrifft das Problem?

    PHP & Transfer Encoding sind iso-8859-1

    Transfer Encoding hat meines Wissens nichts mit Zeichenkodierungen zu tun.

    Mit uft8_decode kann ich den String zwar wieder in einen ISO String verwandeln, doch nicht alle Server sind da Gelich.

    Was meinst du damit? Inwiefern sind "die Server" da nicht gleich?

    Und wenn ich dann eine ISO String erhalten und den mit utf8_decode umwandle stimmts wieder nicht.

    Das kann ja auch nicht, weil ein ISO 8859-1-String mit Byte-Werten größer als 127 kein gültiger UTF-8-String ist und nicht fehlerfrei dekodiert werden kann. Eventuell solltest du vorher testen, ob die Bytefolge gültiges UTF-8 darstellt. (function seems_utf8()) Das wäre für mich aber nur eine Notlösung, wenn nach gründlicher Analyse des Problems keine generelle Lösung gefunden werden kann.

    Man muß dazu sagen daass mein Rechner UTF8 als Standardzeichensatz eingestallt hat, PHP aber ISO-8859-1 und Transfer-Encodeing mit ISO-8859-1 Configuriert sind.

    Vielleicht haben deine Dokumente eine UTF-8-BOM?

    PHP kann erst ab Version 6 mit Unicode umgehen. Es nimmt in früheren Versionen keinerlei Umwandlungen automatisch vor.

    echo "$verabschiedung $name";