Я предлагаю следующее:
/**
* Produce a title with lowercase alphanumeric characters, underscores,
* and dashes. There should be no instances of multiple concurrent dashes,
* and no spaces.
*
* @param string $title the title being sanitized
*
* @return string the sanitized title, or a concatenation of a random
* number and the current time
*/
function seoTitleInUrlGenerate($title)
{
$title = substr(
preg_replace(
array("/([^a-zA-Z0-9_-])/", "/([--]{2,})+/"),
array('', '-'),
strtolower( strtr( trim($title), 'áéíóúñÑ ', 'aeiounN-' ) )
), 0, 160
);
if ($title == "" or $title == "-")
{
return rand(1, 99999) . time();
}
else
{
return $title;
}
}
При тестировании с предоставленным вами входом ...
echo seoTitleInUrlGenerate('the most nice pranks!'); // "the-most-nice-pranks"
Вместо того, чтобы возвращать случайное число и время, я бы предложил вернуть FALSE, если вы не смогли создать действительный заголовок для использования в URL. Таким образом, возможно, вы сможете где-то записать неверный заголовок и исправить это позже. С такой функцией, как сейчас, вы просто получаете числовое возвращаемое значение и не знаете, является ли это результатом недопустимого заголовка или действительным заголовком, который оказался полон чисел.