Hai sa ma bag si eu in seama.
In toate cazurile de mai sus putem ajunge in sitatii neplacute.
De exemplu: nu pot da replace la '!' cu '' pentru ca '!' poate fi la mijlocul textului.
Deasemenea, in alte cazuri, putem ajunge sa avem '---text-de-url---' si un singur replace nu ne ajuta.
Cea ma buna solutie de trim ramane trim($str, $chr) si face trim global la toate instantele $chr .

Eu folosesc o functie cu o singura linie de cod:

Cod PHP:
function doStringToRewriteUrl ($sString){
    return 
strtolower(trim(preg_replace("/[^0-9a-zA-Z]+/""_"$sString),"_"));

O ultima observatie: eu generez stringul pentru mod_rewrite la adaugarea unei inregistrari in baza de date si nu la afisare din 2 motive:
1. o operatie in minus la afisare
2. il generez in timp ce se completeaza titlul articolului si userul il poate edita daca doreste.