Как преобразовать строку в алфавитно-цифровое и преобразовать пробелы в тире?

Я хотел бы взять строку, удалить ее из всех не-буквенно-цифровых символов и преобразовать все пробелы в тире.

Я использую следующий код всякий раз, когда хочу конвертировать заголовки или другие строки в URL-адреса. Он делает все, что вы просите, используя RegEx для преобразования любой строки в буквенно-цифровые символы и дефисы.

function generateSlugFrom($string) { // Put any language specific filters here, // like, for example, turning the Swedish letter "å" into "a" // Remove any character that is not alphanumeric, white-space, or a hyphen $string = preg_replace('/[^a-z0-9\s\-]/i', '', $string); // Replace all spaces with hyphens $string = preg_replace('/\s/', '-', $string); // Replace multiple hyphens with a single hyphen $string = preg_replace('/\-\-+/', '-', $string); // Remove leading and trailing hyphens, and then lowercase the URL $string = strtolower(trim($string, '-')); return $string; } 

Если вы собираетесь использовать код для создания пулов URL-адресов, вы можете захотеть добавить немного дополнительного кода, чтобы сократить его после 80 символов или около того.

 if (strlen($string) > 80) { $string = substr($string, 0, 80); /** * If there is a hyphen reasonably close to the end of the slug, * cut the string right before the hyphen. */ if (strpos(substr($string, -20), '-') !== false) { $string = substr($string, 0, strrpos($string, '-')); } } 

Ах, я использовал это раньше для сообщений в блоге (для URL).

Код:

 $string = preg_replace("/[^0-9a-zA-Z ]/m", "", $string); $string = preg_replace("/ /", "-", $string); 

$string будет содержать отфильтрованный текст. Вы можете повторить это или сделать с ним все, что хотите.

 $string = preg_replace(array('/[^[:alnum:]]/', '/(\s+|\-{2,})/'), array('', '-'), $string);