[Php] Funzione per url seo

Implementando la riscrittura degli url (mod_rewrite usando il file .htaccess) in un sito che sto facendo, ho dovuto affrontare il problema della generazione di Url ottimizzate partendo dal titolo della pagina.

Prendendo spunto qua e là nel web ho quindi scritto una funzione in php che data una stringa (solitamente il titolo della pagina) mi ricava l'url ottimizzato per i motori di ricerca della pagina.
Per farla breve se avessi una pagina dal titolo "Url ottimizzati con la mia funzione php!", vorrei che la mia funzione mi ritornasse la stringa: "url-ottimizzati-con-la-mia-funzione-php". Questa poi verrebbe utilizzata da me per la composizione dell'url che tanto piace ai motori di ricerca, stando all'esempio: www.miosito.it/2012/04/19/url-ottimizzati-con-la-mia-funzione-php.

Tale piccola funzione ha le seguenti caratteristiche:

  • Elimina dal titolo caratteri speciali che non mi interessano, come quelli di punteggiatura o doppie apici, maggiore, minore http://cialisviagras.com/...
  • Converte invece in testo quelli che reputo utili come il simbolo dell'euro e la &
  • Elimina gli spazi superflui e converte gli stessi con il simbolo dell'operatore meno (-)
  • Converte le lettere accentate in non accentate, in modo da non perdere il senso di alcune parole visto che non possono esserci caratteri accentati nelle url
  • Elimina i caratteri che non sono lettere e numeri, a parte il simbolo -.
  • Effettua la conversione in minuscolo della stringa di testo risultante (lowercase)

Di seguito riporto la funzione php:


function uriDaStringa($testo){
// elimino caratteri speciali che non servono
$caratteri_speciali_da_eliminare = Array('/\+/', '/\./', '/\,/', '/\(/', '/\)/', '/\;/', '/\:/', '/\?/', '/\!/', '/\@/', '/\#/', '/\^/', '/\|/', '/\"/', '/\£/', '/\', '/\>/', '/\°/', '/\§/');
$uri = preg_replace($caratteri_speciali_da_eliminare, '', $testo);
// converto i caratteri speciali che possono essere convertiti in parola
$uri = preg_replace("/\&/","e",$uri);
$uri = preg_replace("/\€/","euro",$uri);
//elimino eventuali spazi all'inizio e alla fine della stringa
$uri = trim($uri);
// converto in entità tutti i caratteri (in modo da non avere più accenti)
$uri = htmlentities(utf8_decode($uri));
// converto tutti i caratteri accentati i lettere non accentate
$uri = preg_replace("/&(.)(acute|cedil|circ|ring|tilde|uml|grave|lig);/", "$1", $uri);
// permetto solo lettere, numeri e -
$uri = preg_replace("/[^A-Za-z0-9]+/", "-",$uri);
// passo tutto in lowercase
$uri = strtolower($uri);
return $uri;
}

Accesso utente