trasformare la stringa è abb. semplice
www.php.net/preg_replace

codice:
$uri = strtolower(preg_replace('/[^A-Za-z0-9']+/', '-', $titolo));
integrarsi con il mod rewrite, pure a patto che tu abbia previsto una pagina centrale che viene richiamata per smistare le richieste

generalmente per il mod rewrite uso
codice:
<IfModule mod_rewrite.c>

    # Attiva i link simbolici, usati per il ridirezionamento delle rewrite rules
    Options +FollowSymLinks
    
    # Attiva il rewrite engine
    RewriteEngine on

    # Disattiva l'eventuale esecuzione della regola se il file o la directory  
    # richiesta esiste sul disco
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # Tramite questa  regola, tutte le path passate le passa all'index tramite
    # il parametro p aggiungendo alla fine della path anche la query string senza
    # sovrascrivere quella presente
    RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]

</IfModule>
in questo modo qualsiasi file e/o directory richiesto che non esiste viene mandato al file index.php impostando la variabile p nella query string ($_GET['p'])