2010-01-20 21 views
21

Sul mio sito PHP, attualmente gli utenti accedono con un indirizzo email e una password. Vorrei aggiungere anche un nome utente, questo nome utente che g \ set sarà unico e non può cambiarlo. Mi chiedo come posso fare in modo che questo nome non contenga spazi e lavori in un URL, quindi posso usare lì il nome utente per collegarmi a questi profili e altre cose. Se c'è uno spazio in là username, dovrebbe aggiungere un underscore jason_davis. Non sono sicuro che sia il modo migliore per farlo?Nome utente URL in PHP?

+2

Ci sono molte domande come questa. Non hai avuto una risposta con la ricerca? – Gumbo

+0

@Gumbo Ho cercato SO, non Google. Forse non è il termine corretto, ma ho cercato "nome utente URL friendly" con poca fortuna. Non sapevo che fosse chiamato una lumaca prima di questo. – JasonDavis

+1

Forse non tutti stanno cercando di convertire i nomi utente. Ma la ricerca di "stringhe URL friendly" sta restituendo risultati utilizzabili. – Gumbo

risposta

88
function Slug($string) 
{ 
    return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-')); 
} 

$user = 'Alix Axel'; 
echo Slug($user); // alix-axel 

$user = 'Álix Ãxel'; 
echo Slug($user); // alix-axel 

$user = 'Álix----_Ãxel!?!?'; 
echo Slug($user); // alix-axel 
+9

Questo è pericoloso! Più nomi utente unici possono essere associati allo stesso URL. Non è quello che vuoi, vero? Prendi in considerazione, ad esempio, 'AB' e' ab', che sono stringhe univoche ma mappano sulla stessa stringa di slug. Dovresti memorizzare lo slug come identificatore. –

+2

Bello, Älix! –

+10

@John Feminella: Dovrebbe ovviamente controllare i duplicati ad un certo punto prima di conservare la lumaca. –

3

In altre parole ... è necessario creare un nome utente slug. Doctrine (ORM per PHP) ha una buona funzione per farlo. Doctrine_Inflector::urlize()

MODIFICA: È inoltre necessario mantenere il nome utente slug nel database, come colonna Chiave univoca. Quindi ogni operazione di ricerca dovrebbe essere fatta sulla base di quella colonna, non del nome utente originale.