Table of Contents
      Zend_Uri is a component that aids in manipulating and
      validating Uniform Resource
      Identifiers (URIs). Zend_Uri exists primarily to
      service other components such as Zend_Http_Client but is
      also useful as a standalone utility.
    
      URIs always begin with a scheme, followed by a colon. The construction
      of the many different schemes varies significantly.  The
      Zend_Uri class provides a factory that returns a subclass of
      itself which specializes in each scheme.  The subclass
      will be named Zend_Uri_<scheme>, where
      <scheme> is the scheme lowercased with the first
      letter capitalized. An exception to this rule is HTTPS, which is also
      handled by Zend_Uri_Http.
    
      Zend_Uri will build a new URI from scratch if only a scheme
      is passed to Zend_Uri::factory().
    
Example 32.1. Creating a New URI with Zend_Uri::factory()
<?php
require_once 'Zend/Uri.php';
// To create a new URI from scratch, pass only the scheme.
$uri = Zend_Uri::factory('http');
// $uri instanceof Zend_Uri_Http
 
?>
      To create a new URI from scratch, pass only the scheme to
      Zend_Uri::factory()[13] .
      If an unsupported scheme is passed, a Zend_Uri_Exception
      will be thrown.
    
      If the scheme or URI passed is supported,
      Zend_Uri::factory() will return a subclass of itself that
      specializes in the scheme to be created.
    
      To manipulate an existing URI, pass the entire URI to
      Zend_Uri::factory(). 
    
Example 32.2. Manipulating an Existing URI with Zend_Uri::factory()
<?php
require_once 'Zend/Uri.php';
// To manipulate an existing URI, pass it in.
$uri = Zend_Uri::factory('http://www.zend.com');
// $uri instanceof Zend_Uri_Http
 
?>
      The URI will be parsed and validated. If it is found to be invalid, a
      Zend_Uri_Exception will be thrown immediately. Otherwise,
      Zend_Uri::factory() will return a subclass of itself that
      specializes in the scheme to be manipulated.
    
      The Zend_Uri::check() function can be used if only
      validation of an existing URI is needed.
    
Example 32.3. URI Validation with Zend_Uri::check()
<?php
require_once 'Zend/Uri.php';
// Validate whether a given URI is well formed
$valid = Zend_Uri::check('http://uri.in.question');
// $valid is TRUE for a valid URI, or FALSE otherwise.
 
?>
      Zend_Uri::check() returns a boolean,
      which is more convenient than using Zend_Uri::factory()
      and catching the exception.
    
      Every instance of a Zend_Uri subclass (e.g.
      Zend_Uri_Http) has several instance methods that are useful
      for working with any kind of URI.
    
        The scheme of the URI is the part of the URI that precedes the colon.  For example,
        the scheme of http://www.zend.com is http.
      
Example 32.4. Getting the Scheme from a Zend_Uri_* Object
<?php
require_once 'Zend/Uri.php';
$uri = Zend_Uri::factory('http://www.zend.com');
$scheme = $uri->getScheme();  // "http"
 
?>
        The getScheme() instance method returns only the scheme part of
        the URI object.
      
Example 32.5. Getting the Entire URI from a Zend_Uri_* Object
<?php
require_once 'Zend/Uri.php';
$uri = Zend_Uri::factory('http://www.zend.com');
echo $uri->getUri();  // "http://www.zend.com"
 
?>
        The getUri() method returns the string representation
        of the entire URI.
      
        Zend_Uri::factory() will always validate any URI passed
        to it and will not instantiate a new Zend_Uri subclass
        if the given URI is found to be invalid. However, after the
        Zend_Uri subclass is instantiated for a new URI or a
        valid existing one, it is possible that the URI can then later become
        invalid after it is manipulated.
      
Example 32.6. Validating a Zend_Uri_* Object
<?php
require_once 'Zend/Uri.php';
$uri = Zend_Uri::factory('http://www.zend.com');
$isValid = $uri->valid();  // TRUE
 
?>
        The valid() instance method provides a means to check that the
        URI object is still valid.