Visualizzazione risultati 1 fino 11 di 11

Discussione: Inserimento BB-Code chiuso automaticamente

  1. #1
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito Inserimento BB-Code chiuso automaticamente

    Salve utenti di AV,

    Sto modificando il mio Guestbook sul mio sito, volevo permettere, all'utente che scrive l'aggiunta di tag BB-Code, premetto che questo lo so fare, mi chiedo solamente, se l'utente in un messaggio inserisce un tag e non lo chiude, e possibile farlo chiudere automaticamente dallo script?

    Sevenjeak
    Software developer and much more

  2. #2
    Guest

    Predefinito

    Si. Basta scrivere correttamente lo script

  3. #3
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    E come posso dire allo script di chiudere automaticamente un tag non chiuso?

    Sevenjeak
    Software developer and much more

  4. #4
    Guest

    Predefinito

    Per ogni tipo di tag incrementi una variabile quando lo apri, decrementi quella variabile quando lo chiudi. Se il risultato è maggiore di 1 hai un tag aperto non chiuso, e lo fai chiudere.
    La struttura ideale è l'array
    Codice:
    $tag = array(
    "[a]" => 0,
    "[b]" => 0,
    "[i]" => 0
    /* ecc ecc */
    );
    Scorri i tagi e ogni volta che lo apri incrementi il tag risultante $tag["[a]"]++, quando chiudi il link (in questo caso) decrementi la cella corrispondente. Scandisci l'array alla fine e ogni volta che incontri un tag aperto ma non chiuso lo chiudi.

  5. #5
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Ok, ora ci provo, ti faro sapere.

    Edit:
    Fino ad ora ho permesso di controllare la chiusura di alcuni tag in questo modo:
    Codice PHP:
    // Controllo correttezza tag
    $open_tags = array("[ b ]", "[ i ]", "[ u ]", "[ url ='");
    $close_tags = array("[ /b ]", "[ /i ]", "[ /u ]", "[ /url ]");
    $close_rs = array(0, 0, 0, 0);
    for (
    $i = 0; $i <= strlen(/*testo inserito dall'utente*/); $i++)
    {
    for (
    $ii = 0; $ii < strlen($open_tags); $ii++)
    {
    if (
    $commento[i] == $open_tags[i]) {
    $close_rs[i] = $close_rs[i] + 1;
    }
    }
    }
    for (
    $j = 0; $j <= strlen(/*testo inserito dall'utente*/); $j++)
    {
    for (
    $jj = 0; $jj < strlen($close_tags); $jj++)
    {
    if (
    $commento[j] == $close_tags[j]) {
    $close_rs[j] = $close_rs[i] - 1;
    }
    }
    }
    for (
    $y = 0; $y <= strlen($close_rs); $y++)
    {
    if(
    $close_rs != 0) {
    $tags = true;
    }
    }
    ( nel forum ho aggiunto gli spazi ai nomi dei tag perchè me li visualizzava in modo errato )

    Mi restituisce un sacco di errori, cretto nei cicli for, come mai?
    Ultima modifica di sevenjeak : 17-11-2009 alle ore 16.44.42

    Sevenjeak
    Software developer and much more

  6. #6
    Guest

    Predefinito

    Beh, perchè sbagli a programmare. Fondamentalmente l'approccio utilizzato è sbagliatissimo (risolvere un problema composito utilizzando un blocco unico di codice).

    Per risolvere ti basta una funzione che dato un tag e il testo conta quante volte è presente il tag in quel testo (cioè conta le occorrenze di una parola in un testo, non so se esiste una funzione in php che implementa già la cosa, forse si)
    Comunque basta questo.
    Codice PHP:
    function count_t($tag, $text) {
    $count = 0;
    for(
    $i=0;$i<=strlen($text) - strlen($tag);$i++) {
    $s = substr($text, $i, strlen($tag));
    if(
    $s == $tag)
    $count++;
    }

    return
    $count;
    }
    Il resto viene da se...
    Codice PHP:
    $tag = array(
    "[b];[/b]" => 0,
    "[i];[/i]" => 0
    /* tag_aperto;tag_chiuso */
    );

    foreach(
    $tag as $t => $q) {
    $g = explode(";", $t);
    $tag[$t] = count_t($g[0], $my_text) - count_t($g[1], $my_text);
    }

    foreach(
    $tag as $t => $q) {
    $g = explode(";", $t);
    if(
    $q >= 1)
    echo
    "Tag $g[0] non chiuso\n";
    }
    Ora, il secondo ciclo è fondamentalmente inutile, io l'ho fatto soltanto per farti vedere l'esempio, ti basta il confronto fatto sul primo for senza ripetere l'operazione, cioè
    Codice PHP:
    $tag = array(
    "[b];[/b]",
    "[i];[/i]"
    /* tag_aperto;tag_chiuso */
    );

    foreach(
    $tag as $t => $q) {
    $g = explode(";", $t);
    if((
    count_t($g[0], $my_text) - count_t($g[1], $my_text)) >= 1)
    echo
    "Il tag $g[0] non è stato chiuso";
    }
    Per il resto la sottrazione ti dice 'quante volte' non è stato chiuso, e, quindi, quante volte stampare $g[1] in coda al testo. $my_text è il testo che hai tu.

    Dovrebbe funzionare, non l'ho provato, però è banale.

  7. #7
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    La funzione lo capita, l'unica cosa nella dichiarazione del foreach:
    Codice PHP:
    foreach($tag as $t => $q) {
    la variabile $t sostituisce la variabile $tags, mentre la variabile $q?

    EDIT

    lo potuto provare solamente ora e va, grazie
    Ultima modifica di sevenjeak : 18-11-2009 alle ore 19.29.38

    Sevenjeak
    Software developer and much more

  8. #8
    Guest

    Predefinito

    E' un array associativo, quindi $t è uguale a primo parametro (quello che precede il =>) e $q il secondo (quello che segue il => ).

  9. #9
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Per parametri intendi quelli separati dal punto e virgora o altro?

    Sevenjeak
    Software developer and much more

  10. #10
    Guest

    Predefinito

    sevenjeak, lavori su queste cose e non sai le basi?

    E' un array associativo, cioè:
    Codice PHP:
    $nome_array = array(
    'KEY' => 'VALUE',
    'KEY_1' => 'VALUE_1',
    );
    Potresti trovare questo codice scritto anche così:
    Codice PHP:
    $nome_array['KEY'] = 'VALUE';
    $nome_array['KEY_1'] = 'VALUE_1';
    Quando non scrivi tu la key, questa è "sottintesa" e avrà un valore numerico che parte da 0.

    Avendo così quindi:
    Codice PHP:
    $nome_array = array(
    'KEY' => 'VALUE',
    'KEY_1' => 'VALUE_1',
    'VALUE_SENZA_KEY',
    );
    Se facessi un print_r() dell'array otterresti:
    Codice:
    Array
    (
        [KEY] => VALUE
        [KEY_1] => VALUE_1
        [0] => VALUE_SENZA_KEY
    )
    Facendo il foreach, nel tuo caso, la key è il tag, il value è 0, che andrà però modificato nel corso dello script come spiegato da stoner.

    Nel foreach, quelle due variabili sono degli Alias da utilizzare all'interno di questo, quindi è come se avessi:
    Codice PHP:
    foreach($tag as $t => $v)
    Dpve $tag è l'array, $t risulta la key (in questo caso il bbcode) e $v il valure che nel tuo caso di deffault è 0).

  11. #11
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    fino ad oggi ho visto solo array con indici numerici, non sapevo che l'indice dell'array potesse essere definito, ora che mi ci fai pensare, una sintassi di questo genere lo vista, ma sempre con chiave numerica, cmq grazie.

    Sevenjeak
    Software developer and much more

Regole di scrittura

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