Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1

    stringa per mod_rewrite

    Ciao a tutti

    sapete indicarmi una funzione per trasformare una stringa in una url da utilizzare con il mod_rewrite? mi spiego meglio, mi serve una funzione per un ecommerce che a partire dal nome dell'oggetto, es:

    codice:
    PA Audio Speaker Jack Plate - Dual Speakon & Dual 1/4 inch
    trasformi questa stringa in una che vada bene come url da usare col rewrite, ad esempio

    codice:
    pa-audio-speaker-jack-plate-dual-speakon-dual-inch
    che poi diventerà /123-pa-audio-speaker-jack-plate-dual-speakon-dual-inch.html

    mi sono gia fatto da me una funzione che fa questo usando str_replace ma sono alla ricerca di qualcosa di piu sofisticato, che tenga conto dei caratteri accentati, di caratteri non utf-8, di caratteri speciali tipo / & £ e altro.

    grazie a tutti per l'aiuto
    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  2. #2
    trasformare la stringa è abb. semplice
    www.php.net/preg_replace

    codice:
    $uri = strtolower(preg_replace('/[^A-Za-z0-9']+/', '-', $titolo));
    integrarsi con il mod rewrite, pure a patto che tu abbia previsto una pagina centrale che viene richiamata per smistare le richieste

    generalmente per il mod rewrite uso
    codice:
    <IfModule mod_rewrite.c>
    
        # Attiva i link simbolici, usati per il ridirezionamento delle rewrite rules
        Options +FollowSymLinks
        
        # Attiva il rewrite engine
        RewriteEngine on
    
        # Disattiva l'eventuale esecuzione della regola se il file o la directory  
        # richiesta esiste sul disco
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
    
        # Tramite questa  regola, tutte le path passate le passa all'index tramite
        # il parametro p aggiungendo alla fine della path anche la query string senza
        # sovrascrivere quella presente
        RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]
    
    </IfModule>
    in questo modo qualsiasi file e/o directory richiesto che non esiste viene mandato al file index.php impostando la variabile p nella query string ($_GET['p'])

  3. #3
    per il rewrite è gia tutto a posto, il mio problema è solo ottenere una stringa formattata per bene da usare come link, mi serve una funzione che faccia quello che fa str_replace, ma che lo faccia meglio, perche al momento ottengo delle stringhe che hanno, ad esempio, diversi separatori

    tornando al mio esempio di prima io da questo

    codice:
    PA Audio Speaker Jack Plate - Dual Speakon & Dual 1/4 inch
    vorrei ottenere questo

    codice:
    pa-audio-speaker-jack-plate-dual-speakon-dual-inch
    invece spesso ottengo, ad esempio
    codice:
    pa-audio-speaker-jack-plate---dual-speakon--dual---inch
    grazie
    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  4. #4
    ehm, non ti è piaciuta?

    $uri = strtolower(preg_replace('/[^A-Za-z0-9']+/', '-', $titolo));

  5. #5
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Avevo trovato un po' di tempo fa questa soluzione che mi sembra più completa
    http://www.bryanrite.com/creating-fr...f-8-slug-urls/

  6. #6
    Originariamente inviato da daniele_dll
    ehm, non ti è piaciuta?

    $uri = strtolower(preg_replace('/[^A-Za-z0-9']+/', '-', $titolo));
    non è che non mi piace, è che non tiene conto di accentate, utf-8, ecc...

    grazie comunque per l'aiuto
    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  7. #7
    Originariamente inviato da Luke70
    Avevo trovato un po' di tempo fa questa soluzione che mi sembra più completa
    http://www.bryanrite.com/creating-fr...f-8-slug-urls/
    sembra buona, ho aggiunto la sostituzione degli spazi che qui non considera, ola la provo un po

    grazie 1000
    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  8. #8
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Guarda il link che ti ho suggerito, fa quello che chiedi

  9. #9
    Originariamente inviato da Manuel.s
    non è che non mi piace, è che non tiene conto di accentate, utf-8, ecc...

    grazie comunque per l'aiuto
    uhm, hai ragione, beh in questo caso, se non usi UTF8 sul DB ti consiglio di lanciare un str_replace che converta tutte le lettere accentate nella controparte non accentata ... se le hai in utf8 prima lanci utf8_decode e poi fai la stessa operazione

    @Luke70

    la tua soluzione è interessante, ma fai non poche operazioni

    considera che ad esempio cambiando questa
    preg_replace('/[^a-zA-Z0-9 -]/', '', $url);

    con questa
    preg_replace('/[^a-zA-Z0-9]+/', '-', $url);

    risolvi il problema della seconda preg_replace per togliere gli spazi ed i separatori ripetuti

    inoltre iconv, benché in questo caso faciliti enormemente il lavoro ed è sicuramente presente nel sistema dato che di default le librerie C posix forniscono il supporto a iconv e l'estensione è abilitata di default, ed inoltre converte le lettere accentate e non anche per le altre lingue, è più lenta.
    Se, come in questo caso, i contenuti sono in italiano direi che scomodare le iconv è eccessivo
    Un semplce strtr o str_replace, in questo contesto, ci da lo stesso risultato con molto meno lavoro da parte del server.

    In realtà, in un contesto del genere, visto che gli indirizzi vengono generati quando si salva l'articolo/news/blog/prodotto la performance non è così importante ... però se c'è la possibilità di avere una versione "veloce", perché non averla?

    codice:
    $replace_characters = array
    (
    'à' => 'a',
    'è' => 'e',
    'ù' => 'u',
    'ò' => 'o',
    'ì' => 'i',
    'À' => 'a',
    'È' => 'e',
    'Ì' => 'u',
    'Ò' => 'o',
    'Ù' => 'i'
    )
    $uri = strtr($titolo, $replace_character);
    $uri = strtolower(preg_replace('/[^A-Za-z0-9']+/', '-', $uri));
    nel caso di UTF8, basta lanciare al posto di
    $uri = strtr($titolo, $replace_character);

    questa riga qui
    $uri = strtr(utf8_decode($titolo), $replace_character);

  10. #10
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    volendo si potrebbe fare pure:
    codice:
    $uri = htmlentities(utf8_decode($uri));//ocio
    $uri = preg_replace("/&(.)(acute|cedil|circ|ring|tilde|uml|grave);/", "$1", $uri);
    $uri = preg_replace('/[^A-Za-z0-9']+/', '-',$uri);

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.