Very short snippet: PHP slug

giovedì 28 maggio, 2009

Chi 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:

PHP:
  1. function slug($s) {
  2.     return( strtolower( str_replace(" ", "-", preg_replace("/[^a-z A-Z0-9]/", "", $s) ) ) );
  3. }

Post correlati

Questo articolo ti è stato utile?: Per nientePocoAbbastanzaMoltoMoltissimo
Loading ... Loading ...

9 commenti a: “Very short snippet: PHP slug”

  1. 29 mag, 2009 Napolux:

    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

    PHP:
    1. preg_replace("/[^a-zA-Z0-9\s]/", "", $s)

    (perdonami, oggi sono pignolo)

  2. 29 mag, 2009 Napolux:

    Questa, presa da snipplr rimuove anche i doppi trattini.

    PHP:
    1. function slug($str)
    2. {
    3.     $str = strtolower(trim($str));
    4.     $str = preg_replace('/[^a-z0-9-]/', '-', $str);
    5.     $str = preg_replace('/-+/', "-", $str);
    6.     return $str;
    7. }

  3. 29 mag, 2009 Napolux:

    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...

  4. 29 mag, 2009 Giovambattista Fazioli:

    @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. :P

  5. 29 mag, 2009 Giovambattista Fazioli:

    @Napolux: come anche i caratteri speciali, ovviamente... (vedi ampersen, segni di maggiore/minore, due punti, ecc...)

  6. 29 mag, 2009 Undolog.com» Very short snippet: PHP slug:

    [...] fonte:  Undolog.com» Very short snippet: PHP slug Articoli correlati: Very short snippet: PHP isset_post() | [...]

  7. 29 mag, 2009 IWriteAboutIT:

    Ciao Ragazzi,
    Inutile dirvi che stavo cercando ieri proprio una soluzione simile.
    Grazie veramente per il tempismo..
    Tom

  8. 29 mag, 2009 IWriteAboutIT:

    Ma se ne volessi una completa e definitiva?

  9. 29 mag, 2009 Napolux:

    @IWriteAboutIT:

    Ma se ne volessi una completa e definitiva?

    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();

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre>         // blocco generico
[code][/code]       // blocco generico
[as][/as]           // Actionscript
[css][/css]         // CSS Style Sheet
[html][/html]       // HTML
[js][/js]           // Javascript
[objc][/objc]       // Objective-C
[php][/php]         // PHP
[sql][/sql]         // SQL