Validare un URL in PHP con Zend_Uri

weppos January 7th, 2008

Zend_Uri è una delle molteplici librerie messe a disposizione dallo Zend Framework.
Nasce sostanzialmente come componente a supporto delle altre librerie del framework per la rappresentazione dei diversi tipi di URI, sebbene possa essere utilizzato anche da solo, come vedremo in questo esempio.

Attualmente, la distribuzione di Zend_Uri contenuta nella versione 1.0.3 dello Zend Framework supporta esclusivamente gli schemi HTTP e HTTPS, ma questo è più che sufficiente per il nostro scopo: validare il formato di un URL utilizzando PHP.

Vediamo un esempio concreto.

<?php

// includi la libreria
require_once 'Zend/Uri.php';

// valida l'URL
$valid = Zend_Uri::check('http://www.zend-framework.it/page.php');

if ($valid) {
  echo 'Valido';
} else {
  echo 'Invalido';
}

Questa è senz’altro la soluzione più comoda.
Grazie al metodo statico Zend_Uri::check() è possibile validare un URI. Nel caso l’URI passato non sia valido, $valid assumerà valore FALSE.

Nel caso in cui si desideri manipolare l’URL in seguito può essere utile utilizzare tentare di costruire un nuovo oggetto URI e catturare l’eccezione restituita dal metodo Zend_Uri::factory().

<?php

// includi la libreria
require_once 'Zend/Uri.php';

// costruisci un nuovo URI
try {
  $uri = Zend_Uri::factory('http://www.zend-framework.it/page.php');
} catch(Zend_Uri_Exception $e) {
  echo "URI invalido: " . $e->getMessage();
}

Nel caso in cui l’URI fornito sia valido, $uri conterrà una nuova istanza di un oggetto Zend_Uri specifico, ad esempio nel nostro caso Zend_Uri_Http.
Ecco l’output prodotto dal comando print_r($uri):

Zend_Uri_Http Object
(
  [_username:protected] =>
  [_password:protected] =>
  [_host:protected] => www.zend-framework.it
  [_port:protected] =>
  [_path:protected] => /page.php
  [_query:protected] =>
  [_fragment:protected] =>
  [_regex:protected] => Array
  (
    [alphanum] => [^\W_]
    [escaped] => (?:%[\da-fA-F]{2})
    [mark] => [-_.!~*'()\[\]]
    [reserved] => [;\/?:@&=+$,]
    [unreserved] => (?:[^\W_]|[-_.!~*'()\[\]])
    [segment] => (?:(?:(?:[^\W_]|[-_.!~*'()\[\]])|(?:%[\da-fA-F]{2})|[:@&=+$,;])*)
    [path] => (?:\/(?:(?:(?:[^\W_]|[-_.!~*'()\[\]])|(?:%[\da-fA-F]{2})|[:@&=+$,;])*)?)+
    [uric] => (?:[;\/?:@&=+$,]|(?:[^\W_]|[-_.!~*'()\[\]])|(?:%[\da-fA-F]{2}))
  )
  [_scheme:protected] => http
)

Trackback URI | Comments RSS

Leave a Reply