$value) { if (preg_match("/\[.*\]/", $value)) { array_push($letters, $value); } else { $letterarray = str_split($value); $letters = array_merge($letters, $letterarray); } } $uncompressedtext = $letters[0]; foreach ($letters as $number => $value) { if ($number != 0) { if (preg_match("/\[(.*)\]/", $letters[$number -1], $onlynumber)) { $lastletter = $dictionary[$onlynumber[1]]; } else { $lastletter = $letters[$number -1]; } if (preg_match("/\[(.*)\]/", $value, $onlynumber)) { if ($dictionary[$onlynumber[1] ]) { array_push($dictionary, $lastletter.substr($dictionary[$onlynumber[1] ], 0, 1)); $uncompressedtext = $uncompressedtext.$dictionary[$onlynumber[1]]; } else { $uncompressedtext = $uncompressedtext.$lastletter.substr($lastletter, 0, 1); array_push($dictionary, $lastletter.substr($lastletter, 0, 1)); } } else { array_push($dictionary, $lastletter.$value); $uncompressedtext = $uncompressedtext.$value; } } } return $uncompressedtext; } function compress($text) { $compressedtext = ""; $dictionary = array(); $alreadyset = array(); $letters = str_split($text); foreach ($letters as $number => $value) { if (!$alreadyset[$number]) { $oldentry = 0; $newentry = $value; $numbercopy = $number; while (in_array($newentry.$letters[$numbercopy+1], $dictionary)) { $oldentry = $newentry; $numbercopy++; if ($letters[$numbercopy]) { $alreadyset[$numbercopy] = 1; $newentry = $newentry.$letters[$numbercopy]; } else { break; } } array_push($dictionary, $newentry.$letters[++$numbercopy]); if ($oldentry) { $compressedtext = $compressedtext."[".(array_search($newentry, $dictionary))."]"; } else { $compressedtext = $compressedtext.$value; } } } return $compressedtext; } ?> Lempel-Ziv-Komprimator (v. <? echo VERSION; ?>) MAXLENGTH) { ?>

Fehler: Bitte gib einen Text mit einer Länge zwischen und Zeichen ein.

Fehler: Der String darf die Zeichen [ und ] nicht enthalten.

Der komprimierte Text lautet:

( Zeichen)

Der Originaltext lautete:

( Zeichen)

Dies ist eine Kompressionsrate von ca. %

Der dekomprimierte Text lautet:

( Zeichen)

Der komprimierte lautete:

( Zeichen)

Das folgende, in PHP geschriebene Programm komprimiert und dekomprimiert den in das Eingabefeld eingegebenen Text nach dem LZW-Verfahren. Da es aber durch das Webinterface Schwierigkeiten mit den verschiedenen Zeichensätzen gibt, werden die entsprechen Ersatzzeichen als [X] gekennzeichnet, wobei X für die Nummer des Wörterbucheintrages steht. Dadurch ist allerdings die Kompressionsrate sehr schlecht, weshalb dieses Programm nur zur Demonstration und nicht zur praktischen Verwendung geeignet ist.

Achtung: Ich rate dringend dazu, keine zu außergewöhnlichen Zeichen zu verwenden, da sonst Fehler auftreten können!