Visualizzazione risultati 1 fino 17 di 17

Discussione: Espressione regolare per aggiungere slash finale ai tag

  1. #1
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito Espressione regolare per aggiungere slash finale ai tag

    Devo aggiornare alcune pagine HTML da HTML a XHTML. Una prerogativa dell'XHTML è quello di chiudere tutti i tag. Per i tag che con contengono nulla basta aggiungere uno slash (/) finale (dentro al tag) per chiuderli.
    Per esempio:
    Codice HTML:
    <img src="immagine.jpg" alt="Descrizione immagine">
    Diventa:
    Codice HTML:
    <img src="immagine.jpg" alt="Descrizione immagine" />
    A me servirebbe un'espressione regolare che lo faccia automaticamente.
    Il codice che ho prodotto tuttora è questo:
    Codice PHP:
    $testo=preg_replace("#<img (.+?)[^/]>#si","<img \\1\\2 />",$testo);
    Ma mi cancella l'ultimo carattere.
    Codice HTML:
    <img src="immagine.jpg" alt="Descrizione immagine />
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  2. #2
    Guest

    Predefinito

    Se i documenti sono html e non php e disponi di Dreamweaver, potresti usare la funzione apposita di quest'ultimo, dal menù File->converti in xhtml.

    PS: cmq togliendo la classe [^/] dovrebbe funzionare.


    Ciao!
    Ultima modifica di debug : 10-04-2007 alle ore 12.20.24

  3. #3
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Citazione Originalmente inviato da debug
    Se i documenti sono html e non php e disponi di Dreamweaver, potresti usare la funzione apposita di quest'ultimo, dal menù File->converti in xhtml.
    Non ho DreamWeaver e comunque mi serve farlo in PHP perché prende i testi da database.

    Citazione Originalmente inviato da debug
    cmq togliendo la classe [^/] dovrebbe funzionare.
    In questo modo però aggiungerebbe lo slash anche dove l'ho già messo.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  4. #4
    Guest

    Predefinito

    Dopo un paio di prove:

    preg_replace("#<img (.+?[^/])>#si","<img \\1 />",$testo)


    Ciao!

  5. #5
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    la soluzione è più semplice di quello che pensate XD
    Codice PHP:
    $testo = ereg_replace("/>",">",$testo);
    $testo = ereg_replace(">"," />",$testo);
    prima li togli tutti poi li metti di nuovo
    (lho provato sul pc, se non funziona con lo slash ovviamente metti [//] :D)

    EDIT: debug ha postato mentre stavo cercando la soluzione :P
    Ultima modifica di Luffio : 10-04-2007 alle ore 12.44.32
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  6. #6
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Ho risolto con l'espressione di Debug. Quella di Luffio non aggiungerebbe a qualsiasi tag lo slash?

    EDIT: La soluzione mi dà un problema. Ho un link fatto con un'immagine dove è già presente lo slash finale e aggiunge lo slash alla fine del tag di chiusura del link.
    Codice HTML:
    <a href="..."><img src="..." /></a />
    Ultima modifica di funcool : 11-04-2007 alle ore 09.29.31
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  7. #7
    Guest

    Predefinito

    Zozzamente, potresti sostituire, finite le sostituzioni con la precedente espressione regolare, tutti gli </a /> con </a>
    :)


    Ciaoooooooo!!!!!!

  8. #8
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Ma il problema potrebbe avvenire anche con altri tag. Non si riesce a fare in modo che se lo slash è presente e il tag è finito non continua a cercare?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  9. #9
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Provato e funzionante
    Algoritmo: Divido il testo in pezzi, separando i tag dal resto del testo. Per ogni tag cerco se c'è il tag che chiude, altrimenti è un tag aperto.

    Codice PHP:
    $testo = str_replace("/>",">",$testo);

    $tag_open = strpos($testo,"<");
    while(
    $tag_open!==false){
    if(
    $tag_open!=0){
    $pezzi[] = substr($testo,0,$tag_open);
    $testo = substr($testo,$tag_open);
    }else{
    $tag_close = strpos($testo,">");
    $pezzi[] = substr($testo,0,$tag_close+1);
    $testo = substr($testo,$tag_close+1);
    }
    $tag_open = strpos($testo,"<");
    }
    if(
    strlen($testo)>0)
    $pezzi[] = $testo;

    for(
    $i=0;$i<count($pezzi);$i++){
    if(
    eregi("< *([a-z]+)",$pezzi[$i],$regs)){ // EDIT avevo messo ([a-z])+
    $chiuso = 0;
    $eregi = "< */ *{$regs[1]} *>";
    for(
    $j=$i+1;$j<count($pezzi);$j++){
    if(
    eregi($eregi,$pezzi[$j])){
    $chiuso = 1;
    break;
    }
    }
    if(
    $chiuso==0)
    $pezzi[$i] = str_replace(">"," />",$pezzi[$i]);
    }
    }

    $testo = implode("",$pezzi);
    Ultima modifica di Luffio : 12-04-2007 alle ore 11.07.34
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  10. #10
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Citazione Originalmente inviato da Luffio
    Provato e funzionante
    Algoritmo: Divido il testo in pezzi, separando i tag dal resto del testo. Per ogni tag cerco se c'è il tag che chiude, altrimenti è un tag aperto.

    Codice PHP:
    $testo = str_replace("/>",">",$testo);

    $tag_open = strpos($testo,"<");
    while(
    $tag_open!==false){
    if(
    $tag_open!=0){
    $pezzi[] = substr($testo,0,$tag_open);
    $testo = substr($testo,$tag_open);
    }else{
    $tag_close = strpos($testo,">");
    $pezzi[] = substr($testo,0,$tag_close+1);
    $testo = substr($testo,$tag_close+1);
    }
    $tag_open = strpos($testo,"<");
    }
    if(
    strlen($testo)>0)
    $pezzi[] = $testo;

    for(
    $i=0;$i<count($pezzi);$i++){
    if(
    eregi("< *([a-z])+",$pezzi[$i],$regs)){
    $chiuso = 0;
    $eregi = "< */ *{$regs[1]} *>";
    for(
    $j=$i+1;$j<count($pezzi);$j++){
    if(
    eregi($eregi,$pezzi[$j])){
    $chiuso = 1;
    break;
    }
    }
    if(
    $chiuso==0)
    $pezzi[$i] = str_replace(">"," />",$pezzi[$i]);
    }
    }

    $testo = implode("",$pezzi);
    Se per esempio includo lo script della Top 100, questo codice me lo trasforma in questo modo:
    Codice HTML:
    <script type="text/javascript" src="http://www.altervista.org/js_tags/top100.js" /></script>
    Non è proprio possibile fare qualcosa con una sola espressione regolare o almeno utilizzando qualcosa di meno complesso?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  11. #11
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    lol c'era un piccolisssssssimo errore ! ho corretto il codice, correggilo ciaooo
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  12. #12
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    OK, adesso è tutto a posto. Non è possibile utilizzare uno script meno complesso?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  13. #13
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Citazione Originalmente inviato da funcool
    Non è possibile utilizzare uno script meno complesso?
    Di solito A ME quelli meno complessi non fanno quello che richiedo :P cmq se vuoi pròvaci :D altrimenti stùdiati questo codice e impàrati la funzione ereg_replace se non la sai :P
    Ma poi, alla fin fine, ci son solo 2 cicli, poi il codice è pure indentato :P
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  14. #14
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    No, il codice l'ho capito. Il fatto è che le espressioni regolari non sono il mio forte.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  15. #15
    L'avatar di silverseraph
    silverseraph non è connesso AlterGuru
    Data registrazione
    27-04-2005
    Residenza
    Localhost
    Messaggi
    1,104

    Predefinito

    Prova a fare in questo modo:
    Codice PHP:
    $testo = preg_replace("#<img (.*?) />#", "<img $1>", $testo);
    $testo = preg_replace("#<img (.*?)>#", "<img $1 />", $testo);

  16. #16
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Citazione Originalmente inviato da silverseraph
    Prova a fare in questo modo:
    Codice PHP:
    $testo = preg_replace("#<img (.*?) />#", "<img $1>", $testo);
    $testo = preg_replace("#<img (.*?)>#", "<img $1 />", $testo);
    beh il mio è generale :P ovvio che questa è la soluzione più facile, applicata uno per uno...

    PS x funcool : ragazzo, volevo solo dirti che di solito gli script lunghi rendono meglio di quelli corti perchè son più precisi, un ottimo consiglio che ti do è di commentare i codici, così ogni voglia che li rileggi non trovi fatica a capirli (e modificarli) anche se son lunghi (per la cronaca, alcuni file php mi son venuti di 1000 e passa righe, ma son molto carini :D)
    Ultima modifica di Luffio : 12-04-2007 alle ore 23.48.23
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  17. #17
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Citazione Originalmente inviato da silverseraph
    Prova a fare in questo modo:
    Codice PHP:
    $testo = preg_replace("#<img (.*?) />#", "<img $1>", $testo);
    $testo = preg_replace("#<img (.*?)>#", "<img $1 />", $testo);
    Questa soluzione funziona.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •