Very short snippet: PHP slug
giovedì 28 maggio, 2009Chi sviluppa in Wordpress conosce sicuramente il termine slug, solitamente utilizzato per indicare quelle stringhe di testo che non contengono spazi o altri caratteri "strani". In pratica una stringa URL friendly, cioè in grado di essere utilizzata all'interno di un URL. Normalmente la conversione di una stringa nel formato slug viene svolta in automatico da Wordpress, come il titolo di un post: ad esempio "Questo è un post" viene convertito in "questo-e-un-post". La trasformazione in slug è simile a quella del camelize o camelcase, vista qui. Ecco una possibile implementazione in PHP:
-
function slug($s) {
-
}










19

Tra l'altro la tua funzione restituisce "questounpost" e non "questo-un-post"...
Un'alternativa alla tua preg_replace() che non rimuova gli spazi potrebbe essere
(perdonami, oggi sono pignolo)
Questa, presa da snipplr rimuove anche i doppi trattini.
Non vedo la sostituzione delle accentate, come non vedo tutti i caratteri particolari come ' & ecc... O questo è solo un esempietto?
Io di solito uso una funzione simile passando alla str_replace() 2 array contenenti i caratteri "brutti" e il corrispettivo "buono".
Ad esempio l'apostrofo lo sostituisco con "" (stringa vuota), mentre ad esempio la chiocciola con il trattino...
@Napolux: mi ero dimenticato lo spazio nel filtro, adesso l'ho corretto. Comunque questo è solo un esempio di filtro bypass, nel senso che le accentate, ad esempio, come ricordavi tu, non vengono sostituite ma semplicemente eliminate.
@Napolux: come anche i caratteri speciali, ovviamente... (vedi ampersen, segni di maggiore/minore, due punti, ecc...)
[...] fonte: Undolog.com» Very short snippet: PHP slug Articoli correlati: Very short snippet: PHP isset_post() | [...]
Ciao Ragazzi,
Inutile dirvi che stavo cercando ieri proprio una soluzione simile.
Grazie veramente per il tempismo..
Tom
Ma se ne volessi una completa e definitiva?
@IWriteAboutIT:
Beh... Puoi filtrare tutti i caratteri tranne quelli che ti interessa conservare. Ti crei due array con tutti i casi e poi vai di str_replace();