public static function i($key, $default = 0)
     {
-        $i = Env::_get($key, $default);
-        return is_numeric($i) ? intval($i) : $default;
+        $i = to_integer(Env::_get($key, $default));
+        return $i === false ? $default : $i;
     }
 
     public static function l(array $keys)
 
     public static function i($key, $default = 0)
     {
-        $i = Post::_get($key, $default);
-        return is_numeric($i) ? intval($i) : $default;
+        $i = to_integer(Post::_get($key, $default));
+        return $i === false ? $default : $i;
     }
 
      public static function l(array $keys)
 
     public static function i($key, $default = 0)
     {
-        $i = Get::_get($key, $default);
-        return is_numeric($i) ? intval($i) : $default;
+        $i = to_integer(Get::_get($key, $default));
+        return $i === false ? $default : $i;
     }
 
     public static function l(array $keys)
 
     public static function i($key, $default = 0)
     {
-        $i = Cookie::_get($key, $default);
-        return is_numeric($i) ? intval($i) : $default;
+        $i = to_integer(Cookie::_get($key, $default));
+        return $i === false ? $default : $i;
     }
 
     public static function l(array $keys)
 
 
     public function i($key, $default = 0)
     {
-        $i = $this->_get($key, $default);
-        return (is_int($i) || ctype_digit($i)) ? intval($i) : $default;
+        $i = to_integer($this->_get($key, $default));
+        return $i === false ? $default : $i;
     }
 
     public function l(array $keys)
 
 
     public static function i($key, $default = 0)
     {
-        $i = S::v($key, $default);
-        return is_numeric($i) ? intval($i) : $default;
+        $i = to_integer(S::v($key, $default));
+        return $i === false ? $default : $i;
     }
 
     public static function t($key, $default = '')
 
     }
 }
 
+/** Check if the input data can be seen as an integer.
+ */
+function can_convert_to_integer($data)
+{
+    return is_int($data) || ctype_digit($data);
+}
+
+/** Interpret the input data as an integer or return false.
+ */
+function to_integer($data)
+{
+    if (!can_convert_to_integer($data)) {
+        return false;
+    }
+    return intval($data);
+}
+
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
 ?>