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-> ä -in-> ä
zu konvertieren:
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...
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-> ä -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...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 165001
Url: https://administrator.de/contentid/165001
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
1 Kommentar
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.