UTF-8 - Codierungsproblem

So, Problem gefunden. Zur Komprimierung des Quelltextes wende ich gerne diese Funktion an:

PHP:
    function compress_data($_data){
      $_data = trim($_data);
      $_data = preg_replace('/[\f\n\t\r]+/','',$_data);
      $_data = preg_replace('/[\s]+/',' ',$_data);
      return $_data;
    }

    ob_start('compress_data');


Wie sich nun rausstellt, gibt es genau bei preg_replace + utf8 + à einen Bug: http://www.justskins.com/forums/40090-new-bug-in-preg_replace-concerning-utf-8-characters-99477.html

Habe [\s] nun ganz einfach durch [\ ] ersetzt. Nun klappt's.

Vielen Dank für die Hilfe aller Beteiligten.
 
Verwende lieber eine richtige, verlustfreie Komprimierung wie deflate oder gzip. Deine Komprimierung würde auch gewollte Leerraumzeichen entfernen.

Und was den vermeintlichen Bug angeht, sind viele Funktionen nicht multi-byte-sicher und Zeichen wie das à (U+00E0), das bei UTF-8 mit 0xC3A0 kodiert wird, wird als zwei Zeichen interpretiert (0xC3 und 0xA0), wobei letzteres eben ein Leerraumzeichen (\s äquivalent zu [\u0009\u000B\u000C\u0020\u00A0]) ist.
 
gzip und deflate hab' ich schon versucht, klappt leider nicht bei allen Browsern (bei meinem IE 8 z.B., was mich etwas erstaunt). Deshalb habe ich mir eine eigene kleine Funktion dazu geschrieben. Damit werden alle Weissraumzeichen (bis auf den Leerschlag) entfernt und alle Mehrfach-Leerschläge auf einen einzelnen gekürzt.

Ist zwar nicht so effektiv wie z.B. gzip, klappt dafür aber immer.
 
Zuletzt bearbeitet:
Das einfachste wäre dies dem Webserver zu überlassen oder die ob_start('ob_gzhandler') zu verwenden, um die Ausgabe nicht nur zu puffern sondern auch gleichzeitig zu komprimieren.
 
Zurück