PHP: come creare uno slug da una stringa

PHP: come creare uno slug da una stringa

Creare uno slug da una stringa è un'operazione molto richiesta nell'implementazione di CMS con PHP.

Un'implementazione elementare potrebbe essere la seguente:


function create_slug($str) {
	$raw = strtolower($str);
	$stripped = preg_replace('/[^a-z0-9\s]/', '', $raw);
	$parts = explode(' ', $stripped);
	return implode('-', $parts);
}

Esempio d'uso:


$str = 'Lorem ipsum dolor';
$slug = create_slug($str); // lorem-ipsum-dolor

C'è un problema: la nostra implementazione non tiene conto dei caratteri accentati e di conseguenza tali caratteri verranno eliminati. Possiamo modificarla come segue:


function replace_accented($str){
	$search = explode(',','ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,ø,Ø,Å,Á,À,Â,Ä,È,É,Ê,Ë,Í,Î,Ï,Ì,Ò,Ó,Ô,Ö,Ú,Ù,Û,Ü,Ÿ,Ç,Æ,Œ');
	$replace = explode(',', 'c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,o,O,A,A,A,A,A,E,E,E,E,I,I,I,I,O,O,O,O,U,U,U,U,Y,C,AE,OE');
	return str_replace($search, $replace, $str);	
}

Quindi:


function create_slug($str) {
	$raw = replace_accented(strtolower($str));
	$stripped = preg_replace('/[^a-z0-9\s]/', '', $raw);
	$parts = explode(' ', $stripped);
	return implode('-', $parts);
}

Torna su