norrodar
Goto Top

Mit PHP ANSI Dateien schreiben

Mit PHP aus UTF8-Code eine ANSI-Datei schreiben - Umlaute sind nicht korrekt.

Hallo,

ich habe ein ziemlich verwirrendes Problem.
Um das ganze mal zu verdeutlichen:

Es gibt eine Perlschnittstelle. Rufe ich das Perlscript über den Browser mit den GET-Parametern "?id=12345&splitter=<->" auf, so werden mir im Browser die Datensätze aus einer Datenbank zur ID "12345" angezeigt:
Spaltenname1<->Wert1
Spaltenname2<->Wert2
Spaltenname3<->Wert3
... usw ...

Mit PHP rufe ich dieses Perlscript auf und lese die daraus entstandene Seite aus - erhalte dabei (wahrscheinlich) UTF8-Basierte Werte, die ich in entsprechende Variablen/Arrays abspeichere.
Nun wird mit PHP eine Vorlage (Textdatei) im ANSI-Format eingelesen und Zeilenweise komplett in ein Array gespeichert.
Dieses Array wird dann mit den Werten (welche vom Perl-Script kamen) bearbeitet (einige Elemente kommen hinzu, andere Elemente werden nur leicht abgeändert).
Das daraus entstandene "neue" Array wird dann in eine neue Textdatei geschrieben - wieder entspricht ein Element einer Zeile. Diese finale Datei muss ANSI-Codiert sein!

Soweit funktioniert das alles auch wunderbar - allerdings werden Umlaute wie "Ü" und "ö" wie folgt in der finalen Datei dargestellt:
�

Egal welcher Umlaut, es kommt immer statt des Umlautes "�" heraus.
Die Umlaute in der eingelesenen Vorlage bleiben aber vorhanden. Nur die Werte aus der Datenbank, welche hinzugefügt werden, weisen diese Problematik auf.

Problemlösung:
Da habe ich versucht, alle Werte, welche aus der Datenbank kommen, durch einen (PHP)-Konverter zu schubsen mit den PHP-Hauseigenen Funktionen "UTF8_encode" und dem Gegenstück "UTF8_decode" - ohne Erfolg.
Dann habe ich "htmlentities" benutzt, um das ganze HTML-Kompatibel zu formatieren und dieses mit "html_entity_decode" im Windows1252-Format wieder rückgängig gemacht - also nur ein anderer Weg, um:
ä -in-> &auml; -in-> ä
zu konvertieren:

function encode_conv($var, $enc_out = "Windows-1252", $enc_in = "utf-8") {  
    $var = htmlentities($var, ENT_QUOTES, $enc_in);
    $var = html_entity_decode($var, ENT_QUOTES , $enc_out);
	
    return $var;
}

Das Problem besteht fort - ich finde einfach keine Lösung, vllt jemand von euch?
Ich wäre zu tiefst dankbar!

Grüße,
Nira

PS:
Konvertiere ich die aus der Datenbank kommenden Werte direkt im Perl-Script mit UTF8-encode (Encode-Modul), so glaube ich "wahren" UTF8 Strings zu erhalten... diese aber wieder zurückzukonvertieren (decode) oder nochmals zu codieren (encode) mit jeweils UTF8 bringt wieder irgendwelchen Blödsinn heraus...

Content-Key: 165001

Url: https://administrator.de/contentid/165001

Printed on: April 16, 2024 at 13:04 o'clock

Member: dog
dog Apr 21, 2011 at 10:54:25 (UTC)
Goto Top
erhalte dabei (wahrscheinlich) UTF8-Basierte Werte,

Wahrscheinlich hilft nicht weiter.
Nimm wget oder curl und speicher die Seite in eine Datei.
Dann öffnest du das in Notepad++ und gehst die Kodierung so lange durch bis die Umlaute sichtbar sind (natürlich gibt es sich überlagernde Zeichensätze).
Anstatt utf8_decode o.Ä. benutzt du dann die iconv Funktion.