Der Martin: Zeichencode in Zeichen konvertieren / Sonderzeichen in Form

Beitrag lesen

Hallo,

Nachtrag:
[...]
Die von mir genannten Umlaute, die erst durch utf8_encode() richtig dargestellt werden, werden mit include aus einer weiteren PHP-Datei geholt.

mit anderen Worten: Du hast ein Mischmasch verschiedener Codierungen, die du nun einfach in einem Topf wirfst und gut verrührst.
Meinst du nicht, es wäre einfacher und sinnvoller, alle beteiligten Dateien in einer gemeinsamen Codierung vorzuhalten, beispielsweise UTF-8?

Alle Variablen in der "eigentlichen" PHP-Datei, die Sonderzeichen enthalten, werden durch den Gebrauch von utf8_encode() utf-codiert angezeigt.

Das wäre dann überflüssig.

Über include() wird eine 2. PHP-Datei eingebunden, in der Variablen definiert werden, die über die 1. PHP-Datei auch im Output landen. Diese enthalten auch Sonderzeichen, wie z.B. ä, was hinterher auf der Seite auch als ä dargestellt wird.
Es gibt aber auch Variablen in der 1. PHP-Datei, die Sonderzeichen enthalten, die im Output landen. Diese Sonderzeichen werden auf der Webseite UTF-codiert angezeigt, also zum Beispiel ä statt ä.

Also ist dein übergeordnetes PHP-Script anscheinend in UTF-8 codiert, du verkaufst es dem Client aber als ISO-8859-1 oder etwas Verwandtes. Die includierte Datei scheint ihrerseits in ISO-8859-x codiert zu sein.

$tmp = "ä";
Ich habe diese Variable $tmp dann dem Ouput hinzugefügt (welcher vor dem print durch utf8_encode() läuft).
Es wird ä angezeigt.

Klar, ein "ä" ist in UTF-8 codiert, die zwei Bytes, die es repräsentieren, werden ihrerseits *nochmal* in UTF-8 umcodiert. Da kommt Blödsinn raus.

Wenn ich diese Zeile aus der 1. PHP-Datei herausnehme und stattdessen mit Copy & Paste in die 2. PHP-Datei einfüge (die 2. PHP-Datei wird mit include() in die 1. PHP-Datei eingebunden) und nichts an der Stelle (in der 1. PHP-Datei) ändere, wo $tmp dem Output angehängt wird, dann wird das gewünschte ä angezeigt. Der Output läuft vor dem print immer noch durch utf8_encode().

Ja. Ein in ISO codiertes "ä" wird mit utf8_encode() umcodiert und dann als UTF-8 ausgegeben.

Wie kann es sein, dass ein und der selbe String nur richtig ausgegeben wird, wenn er in einer anderen PHP-Datei steht, die included wird - bzw. wie kann es sein, dass ich die Variablen aus der includeten Datei durch utf8_encode() laufen lassen muss, andere aber nicht?

Die beiden Dateien verwenden verschiedene Textcodierungen. Sagte ich ja schon.

Ich habe das Problem scheinbar dadurch gelöst, dass ich die Variablen, die ich in der 1. PHP-Datei nutze, die aus der 2. (includeten) PHP-Datei stammen, bevor sie verarbeitet werden mit utf8_encode() ins UTF-Format konvertiere. Dafür lasse ich den Output in der 1. PHP-Datei vor dem print *nicht* mehr durch utf8_encode() laufen.

Das ist keine Lösung, das ist Yoga rückwärts mit Überschlag.

So long,
 Martin

--
F: Was ist schlimmer: Alzheimer oder Parkinson?
A: Parkinson. Lieber mal ein Bier vergessen zu zahlen, als eins verschütten.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(