Qual é a melhor maneira de limpar uma string para posicionamento em um URL, como o nome da pergunta no S

Estou procurando criar uma string de URL como a que o SO usa para os links para as perguntas. Não estou olhando para reescrever o URL (mod_rewrite). Estou olhando para gerar o link na página.

Exemplo: o nome da pergunta é:

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

A URL acaba sendo:

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

A parte em que estou interessado é:

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

Então, basicamente, eu estou procurando limpar qualquer coisa que não seja alfanumérica, mantendo a URL legível. Criei o seguinte, mas não tenho certeza se é a melhor maneira ou se abrange todas as possibilidades:

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

Então, basicamente

apara substitua qualquer não alfanumérico mais o espaço por nadaubstitua tudo que não é alfanumérico por um trasubstituir com -strtolower()urlencode() - provavelmente não é necessário, mas apenas para uma boa medida.

questionAnswers(1)

yourAnswerToTheQuestion