Visualizzazione risultati 1 fino 13 di 13

Discussione: [php] Chiudere tutti i tag lasciati aperti dall'utente

  1. #1
    Guest

    Predefinito [php] Chiudere tutti i tag lasciati aperti dall'utente

    se un utente scrive <B> (oppure [B]..) ma si dimentica di chiudere..

    ...Ci vorrebbe una funzione che leggesse tutto il testo inserito dall'utente e automaticamente chiudesse i tag aperti...

    Ne avete una gia pronta?

    P.S: non posso usare htmlentities!
    Ultima modifica di attorianzo : 21-02-2006 alle ore 13.53.33

  2. #2
    L'avatar di powser
    powser non è connesso Moderatore
    Data registrazione
    29-12-2003
    Residenza
    Ragusa
    Messaggi
    2,917

    Predefinito

    E come si fa a capire quando l'utente voleva chiudere il tag? se quel tag deve essere per 1,2 o tre parole?
    In quel caso mi sa che si può fare veramente poco, l'unica è l'accortezza dell'utente a chiudere tutti i tag che apre
    "I have something to say, it's better to burn out than to fade away..." Victor Kruger/The Kurgan

    My Site

    La risposta alla tua domanda, la trovi su http://forum.altervista.org basta fare una ricerca!

  3. #3
    Guest

    Predefinito

    Beh dai non importa... Magari tutto quello che scrive lui nel suo post gli resta in grassetto.. poco importa... L'importante è che non diventi grassetto tutto il sito!

    Stavo pensando che potrei fare un modo che lui "conti" quante volte la sottostringa <B> è presente nel testo, e quante volte è invece presente il </B>...

    Se il num. dei <b> è maggiore dei </b>, lui piazza tanti </b> quanti servono per chiudere...

    Penso che risolverò la questione con substr_count a meno che voi non abbiate un'idea migliore...
    Ultima modifica di attorianzo : 21-02-2006 alle ore 14.21.50

  4. #4
    Guest

    Predefinito

    puoi con un espressione regolare cambiare i tag e se non è chiuso alla fine il tag nn cambi niente.

    devi usare un codice tipo questo:

    Codice PHP:
    <?
    $text
    = $_POST['text'];
    $text = preg_replace("#\[B\](.*?)\[\/B\]#is", "<b>$1</b>", $text);

    echo
    $text;
    ?>
    ciao ^__^

  5. #5
    Guest

    Predefinito

    Codice PHP:
    $string = preg_replace("#\[B\](.*?)\[\/B\]#is", "[B]$1[/B]", $string);

    L'ho usata così... come mai non va?
    Ultima modifica di attorianzo : 21-02-2006 alle ore 15.22.21

  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

    Non va perché quel codice trasforma i tag [b] e [/b] in <b> e </b> se vengono chiusi correttamente.
    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

    Citazione Originalmente inviato da attorianzo
    Codice PHP:
    $string = preg_replace("#\[B\](.*?)\[\/B\]#is", "[B]$1[/B]", $string);

    L'ho usata così... come mai non va?
    se scrivi solo [B] non ti scrive tutto in grassetto ma neanche ti chiude il tag

    ciao ^__^

  8. #8
    Ospite Guest

    Predefinito

    secondo me per quello che vuoi fare tu sarebeb meglio fare inserire i campi con js in un
    prompt

  9. #9
    Guest

    Predefinito

    Codice PHP:
    $string = preg_replace("#\[B\](.*?)\[\/B\]#is", "[B]$1[/B]", $string);
    MM.... non so guarda questa riga non funziona...

    Se l'utente scrivesse nella textarea "pippo" allora ok, il tag apre e chiude ed è tutto apposto e il risultato è solo "pippo".



    Invece se l'utente scrive "[B]pippo" allora il risultato è "pippo" e tutto il resto del suo post piu tutto il resto della mia pagina da quel punto in poi diventa tutto in grassetto.. Attualmente per evitare il problema uso:



    Codice PHP:
    $string = chiudi_tag_lasciati_aperti($string, "[B]", "[/B]");
    $string = chiudi_tag_lasciati_aperti($string, "[I]", "[/I]");
    $string = chiudi_tag_lasciati_aperti($string, "[U]", "[/U]");


    function
    chiudi_tag_lasciati_aperti($string, $tag_aperto, $tag_chiuso) {

    $corrisp_apertura = substr_count($string, $tag_aperto);
    $corrisp_chiusura = substr_count($string, $tag_chiuso);
    if (
    $corrisp_apertura > $corrisp_chiusura ) {
    $numero_chiusure = $corrisp_apertura - $corrisp_chiusura;

    for (
    $x=1; $x <= $numero_chiusure; $x++) {
    $string .= $tag_chiuso;
    }
    }
    return
    $string;
    }


    Così funziona... Non riesco a fare funzionare invece quella espressione regolare non capisco dove sta l'errore...

  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

    Io uso questa e mi funziona:
    Codice PHP:
    $testo=preg_replace("#\[b\](.+?)\[/b\]#si", "<b>\\1</b>", $testo);
    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
    Guest

    Predefinito

    Citazione Originalmente inviato da attorianzo
    Codice PHP:
    $string = preg_replace("#\[B\](.*?)\[\/B\]#is", "[B]$1[/B]", $string);
    [...]
    Non riesco a fare funzionare invece quella espressione regolare non capisco dove sta l'errore...
    Non è che è perchè sostituisci [B] con [B] invece che con <b>?

  12. #12
    Guest

    Predefinito

    Quella espressione regolare non fa altro che convertire [ b] in <b>, non chiude e non conta nulla. Quindi quella funzione chiudi_tag_lasciati_aperti va benissimo...

  13. #13
    Guest

    Predefinito

    Signori.... ci ho lavorato su stasera...

    ..Vi presento la soluzione definitiva:

    Codice PHP:

    function chiudi_tag_lasciati_aperti($string, $tag_aperto, $tag_chiuso) {
    $pieces = explode($tag_aperto, $string);
    $lungh_array= count($pieces);

    for (
    $x=0; $x < $lungh_array; $x++) {
    if (
    $x!=0 && strpos($pieces[$x], $tag_chiuso) === FALSE) $pieces[$x] .= $tag_chiuso;
    }

    $string = implode ($tag_aperto,$pieces);

    return
    $string;
    }
    Ciauz!!!

Regole di scrittura

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