Первая полоска нежелательных символов
$new_string = preg_replace("/[^a-zA-Z0-9\s]/", "", $string);
Затем изменяет пробелы для непоследовательных значений
$url = preg_replace('/\s/', '-', $new_string);
Наконец кодирует его готовым к использованию
$new_url = urlencode($url);