--- gettext.php.orig	2006-02-02 20:04:02.000000000 +0100
+++ gettext.php	2007-03-21 14:37:45.735754300 +0100
@@ -283,7 +283,39 @@
         $expr = $regs[1];
       else
         $expr = "nplurals=2; plural=n == 1 ? 0 : 1;";
-      $this->pluralheader = $expr;
+
+      // sanitize
+      $expr = preg_replace(
+        '@[^a-zA-Z0-9_:;\(\)\?\|\&=!<>+*/\%-]@',
+        '',
+        $expr
+      );
+      
+      // add parens
+      // important since PHP's ternary evaluates from left to right
+      $expr.= ';';
+      $res= '';
+      $p= 0;
+      for ($i= 0; $i < strlen($expr); $i++) {
+        $ch= $expr[$i];
+        switch ($ch) {
+          case '?':
+            $res.= ' ? (';
+            $p++;
+            break;
+          case ':':
+            $res.= ') : (';
+            break;
+          case ';':
+            $res.= str_repeat( ')', $p) . ';';
+            $p= 0;
+            break;
+          default:
+            $res.= $ch;
+        }
+      }
+      
+      $this->pluralheader = $res;
     }
     return $this->pluralheader;
   }
