Alle Daten in LxOffice können über INPUT_ENCODING das encoding des Formulars überschreiben, das ist nötig weil Javascript da sein eigenes Ding dreht.
Das führt dazu, dass alle http Quellen:
1. Normal dekodiert werden müssen 2. Später noch einmal recoded werden müssen, falls ein anderes encoding angegeben ist.
Uploads, die mit dem encoding binary geschickt werden, dürfen dagegen garnicht recoded werden. Deshalb wurden bisher alle multipart/form-data Daten davon ausgenommen, was aber zu Fehlern führt, wenn ein Formular gemischte Werte über multipart/form-data sendet. Am einfachsten zu demonstrieren im CsvImport, wenn man 'ä' als sep_char angibt.
Dieser Patch ändert das in zwei Container, in die einsortiert wird:
- Bekanntes Encoding (wird sofort nach $::form decoded) - Eventuell unbekanntes Encoding (wird decoded, aber in einen Zwischencontainer sortiert, und später recoded, falls nötig)
Dadurch muss das recoding nicht mehr in-place gemacht werden.
Alles in multipart/form-data wird jetzt decodiert, ausser Dateiuploads (erkennbar am filename Attribut) und explizit binary geflaggtes content-transfer-encoding.
Bei kollidierendem INPUT_ENCODING und "content-type; charset" wird erst das content-type charset dekodiert, und dann ein recode aus internem coding in das angefragte INPUT_ENCODING gemacht.
Recoding von Daten konzeptuell getrennt.
Es gibt 4 Pfade um Daten in einen Request zu kriegen:
Der letzte Teil teilt sich noch einmal in
Alle Daten in LxOffice können über INPUT_ENCODING das encoding des Formulars
überschreiben, das ist nötig weil Javascript da sein eigenes Ding dreht.
Das führt dazu, dass alle http Quellen:
Uploads, die mit dem encoding binary geschickt werden, dürfen dagegen garnicht
recoded werden. Deshalb wurden bisher alle multipart/form-data Daten davon
ausgenommen, was aber zu Fehlern führt, wenn ein Formular gemischte Werte über
multipart/form-data sendet. Am einfachsten zu demonstrieren im CsvImport, wenn
man 'ä' als sep_char angibt.
Dieser Patch ändert das in zwei Container, in die einsortiert wird:
Dadurch muss das recoding nicht mehr in-place gemacht werden.
Alles in multipart/form-data wird jetzt decodiert, ausser Dateiuploads
(erkennbar am filename Attribut) und explizit binary geflaggtes
content-transfer-encoding.
Bei kollidierendem INPUT_ENCODING und "content-type; charset" wird erst das
content-type charset dekodiert, und dann ein recode aus internem coding in das
angefragte INPUT_ENCODING gemacht.