public function parse($url)
  {
    $parts = $this->_parse_url($url);

    foreach(array('user', 'pass', 'fragment') as $part)
      if(isset($parts[$part]))
        $parts[$part] = urldecode($parts[$part]);

    if(isset($parts['host']))
      $parts['host'] = idn_to_utf8($parts['host']);

    if(isset($parts['path']))
      $parts['path'] = rawurldecode(str_ireplace('%2F', '%252F', $parts['path']));

    return $this->setParts($parts);
  }