¿Cuál es la mejor manera de limpiar una cadena para colocarla en una URL, como el nombre de la pregunta en SO?

Estoy buscando crear una cadena de URL como la que SO usa para los enlaces a las preguntas. No estoy buscando reescribir la url (mod_rewrite). Estoy buscando generar el enlace en la página.

Ejemplo: el nombre de la pregunta es:

Is it better to use ob_get_contents() or $text .= ‘test’;

La URL termina siendo:

http://stackoverflow.com/questions/292068/is-it-better-to-use-obgetcontents-or-text-test

La parte que me interesa es:

is-it-better-to-use-obgetcontents-or-text-test

Así que, básicamente, estoy buscando limpiar todo lo que no sea alfanumérico mientras sigo leyendo la URL. He creado lo siguiente, pero no estoy seguro de si es la mejor manera o si cubre todas las posibilidades:

$str = urlencode(
    strtolower(
    str_replace('--', '-', 
    preg_replace(array('/[^a-z0-9 ]/i', '/[^a-z0-9]/i'), array('', '-'), 
    trim($urlPart)))));

Así que básicamente

recorta Reemplace cualquier no alfanumérico más el espacio sin nadathen reemplaza todo no alfanumérico con un guiónreemplazar con -strtolower()urlencode() - probablemente no sea necesario, pero solo por si acaso.

Respuestas a la pregunta(1)

Su respuesta a la pregunta