Decode HTTP Chunked Transfer

2007-09-14

OK, mal wieder gab es ein Problem, welches irgendwie keine im Internet auffindbare Lösung hatte. Ich habe mit PHP einen ‘chunked’-http-body auswerten müssen und der sieht dann in etwa so aus:

12
Dies ist ein Test!
5
Blöd!
0

Jetzt galt es also eine kleine Funktion zu schreiben, welche mir das ganze in folgendes umwandelt:

Dies ist ein Test!Blöd!

Also erstmal geschaut was die Zahlen bedeuten. Sind natürlich hex-Werte mit der Länge des folgenden Chunks. Und am Ende kommt eine 0. Also folgende Funktion tut genau das!

function decode_chunked($string) {
$lines = explode("\r\n",$string);
$i=0;
$length = 999;
$content = '';
foreach($lines as $line) {
$i++;
if ($i%2 == 1) {
$length = hexdec($line);
} elseif ($length == strlen($line)) {
$content .= $line;
}
if ($length == 0)
break;
}
return $content;
}
  1. Sven Kaiser - Juli 3rd, 2008 at 14:46

    Habe derzeit genau daselbe Problem festgestellt. Wußte nicht wo die Sonderzeichen mitten im HTML-Code herkam. Jetzt weiß ichs.
    Cool, vielen Dank!

  2. Patrick - September 25th, 2008 at 11:48

    Super Function, hatte das Problem auch sehr lange. Damit wird endlich alles gut.