Implementando la riscrittura degli url (mod_rewrite usando il file .htaccess), ho dovuto affrontare il problema della generazione di Url ottimizzate partendo dal titolo della pagina per il nostro CMS proprietario.
Prendendo spunto qua e là nel web ho quindi scritto una funzione in php che data una stringa mi ricava l'url ottimizzato per i motori di ricerca della pagina.
Per farla breve se avessi una pagina dal titolo "Riscrittura Url ottimizzati con la mia funzione php!", vorrei che la mia funzione mi ritornasse la stringa: "-riscrittura-url-ottimizzati-con-la-mia-funzione-php". Questa poi verrebbe utilizzata dal CMS per la composizione dell'url canonico che tanto piace ai motori di ricerca, stando all'esempio: www.miosito.it/2014/08/19/riscrittura-url-ottimizzati-con-la-mia-funzione-php.
Questa piccola funzione ha le seguenti caratteristiche:
- Elimina dal titolo caratteri speciali che non interessano, come quelli di punteggiatura o doppie apici, maggiore, minore...
- 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 che permette la riscrittura degli indirizzi:
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; }