Ausgaben mit FCGI richtig codieren
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 20 Sep 2010 15:40:06 +0000 (17:40 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 20 Sep 2010 15:40:06 +0000 (17:40 +0200)
commitf5bc233522743646b118d0756b0041b16418fbdf
tree6f83dda011a96a735f3356e2f7f08aa1bbb99ae5
parent514439bd8e9e969eceb0cca472143e5bc24e2198
Ausgaben mit FCGI richtig codieren

Hintergrund:

FCGI benutzt Perls I/O-Schitensystem nicht. Deshalb kümmert es sich
auch nicht um mit 'binmode STDOUT, ":utf8"' gesetzte
Konvertierungsparameter. Weiterhin enthält FCGI ab Version 0.69 Fixes,
die doppeltes Encoding bei der Ausgabe vermeiden und damit eigentlich
korrektes Verhalten herstellen.

Leider geht damit Lx-Offices Art, wie Strings intern gehandhabt und
ausgegeben werden, in die Hose. Lx-Office speichert Strings in Perls
internem Encoding und verlässt sich auf die mit "binmode" aktivierte,
autoatmische Konvertierung bei der Ausgabe.

Dieser Workaround implementiert das Umcodieren vom internen Encoding
nach UTF-8 mittels Monkeypatching, bevor die FCGIs originale
PRINT-Routine aufgerufen wird.

Das darf allerdings nicht passieren, wenn unbearbeitete Ausgabe
benötigt wird -- z.B. beim Download von
Binärdaten (PDFs). Glücklicherweise ist dies in der Funktion
"with_raw_io" in Locale gekapselt, sodass dieser Workaround den Status
"unbearbeitete Ausgabe?" bei Locale erfragen kann.
SL/FCGIFixes.pm [new file with mode: 0644]
SL/Locale.pm
dispatcher.fpl