private static function validateParams($name, $params, array $others) {
        if (is_array($params)) {
            foreach ($params + $others as $key => $value) {
                if ($key === '' || $value === null) {
                    unset($params[$key]);
                    continue;
                }
                $params[$key] = self::validateString("{$name}[$key]", $value);
            }
            return $params;
        }
        if (false === $params = filter_var($params)) {
            throw new InvalidArgumentException("The value of $name must be a 1-demensional array or query string.");
        }
        $tmp = $others;
        if ('' !== $params = trim($params)) {
            foreach (explode('&', $params) as $pair) {
                list($key, $value) = explode('=', $pair, 2) + array(1 => '');
                $tmp[urldecode($key)] = urldecode($value);
            }
        }
        return $tmp;
    }