diff --git a/include/class.charset.php b/include/class.charset.php
index d33c3abd105e067c169cff6a348f774b2d3bf079..160c26fadb59a8bc3dc10a4aba7277e2f269af21 100644
--- a/include/class.charset.php
+++ b/include/class.charset.php
@@ -77,4 +77,32 @@ class Charset {
         return self::transcode($text, $charset, self::UTF8);
     }
 }
+
+class transcode_filter extends php_user_filter {
+  var $from;
+  var $to;
+
+  function filter($in, $out, &$consumed, $closing) {
+      while ($bucket = stream_bucket_make_writeable($in)) {
+        $bucket->data = Charset::transcode($bucket->data, $this->from,
+                $this->to);
+        $consumed += $bucket->datalen;
+        stream_bucket_append($out, $bucket);
+      }
+      return PSFS_PASS_ON;
+  }
+
+  function onCreate() {
+      switch ($this->filtername) {
+      case 'transcode.utf8-ascii':
+          $this->from ='utf-8';
+          $this->to = 'ISO-8859-1';
+          break;
+      default:
+          return false;
+      }
+      return true;
+  }
+}
+stream_filter_register('transcode.*', 'transcode_filter');
 ?>