Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di puddu
    Registrato dal
    Mar 2001
    Messaggi
    143

    Problema con anteprima che si ferma al punto

    Salve a tutti. Ho il seguente codice...

    Codice PHP:
    $offset 150;
    if ((
    strlen($testo) > $offset) || (strlen($testo) == $offset))  {
     
    $anteprima substr($testo,0,strpos($testo,'.',$offset)+1);
    }
    else if (
    strlen($testo) < $offset)
    {
     
    $anteprima $testo;

    ... che, a partire da una variabile $testo, mi calcola un'anteprima ($anteprima) consistente in una piccola parte del suddetto testo: dall'inizio fino al primo punto rilevato dopo 150 caratteri.

    Ora, vorrei fare in modo che l'anteprima si interrompa quando viene trovato il punto seguito da uno spazio oppure da un "accapo", perchè attualmente mi si ferma anche quando, ad esempio, trova il punto di qualche indirizzo web (www.nomesito.com).

    qualcuno di voi saprebbe indicarmi come fare per risolvere questo problema?

    Grazie in anticipo a chi vorrà aiutarmi. Ciao

  2. #2
    if (strlen($descrizionenews1)>150){
    $i=150;
    do {
    $now=substr($descrizionenews1,$i,1);
    if ($i<0)
    break;
    $i--;
    } while ($now != " ");
    $i++;
    $descrizionenews1= substr($descrizionenews1[$n], 0, $i) . " ...";
    }
    else $descrizionenews1=$descrizionenews1;


    }

    Prova ad ispirarti a questo codice.

  3. #3
    Ciao compaesano!
    Ho scritto queste righe spinto da un impulso campanilistico!
    Codice PHP:
    <?php
    $frase 
    "Questa è un articolo molto lungo.\nUna frase\n".
                
    "a cavallo. Voglio riuscire a estrapolarne una introduzione. Deve essere lunga circa 150 caratteri.".
                
    "Frase uno.\n".
                
    "Frase 2. Frase 3. Complichiamo con un indirizzo web [url]www.ciao.it.[/url] Altra frase un po' più lunga.";

    $numero_di_caratteri 150;

    preg_match_all("/(\.\s)+/",$frase,$out,PREG_OFFSET_CAPTURE);

    $minima_distanza strlen($frase);
    $offset_minima_distanza false;

    foreach (
    $out[0] as $offset)
    {
        
    $distanza abs($numero_di_caratteri $offset[1]);
        if(
    $distanza $minima_distanza)
        {
            
    $minima_distanza $distanza;
            
    $offset_minima_distanza $offset[1];
        }
    }

    echo 
    substr($frase0$offset_minima_distanza 1);
    ?>
    ti restituiscono una introduzione della $frase con lunghezza variabile ma il più vicina possibile ai $numero_di_caratteri
    La frase viene tagliata nei punti in cui c'è un punto seguito da uno spazio o un accapo o una tabulazione ecc.
    Richiesto PHP 4.3 e superiori
    Fammi sapere se funziona!

    P.S.: Forza Bari, tutti in C

  4. #4
    l'espressione regolare dell'es. precedente è stata riportata male, correggetela con:
    preg_match_all("/(\.\s)+/",$frase,$out,PREG_OFFSET_CAPTURE);

  5. #5
    Utente di HTML.it L'avatar di puddu
    Registrato dal
    Mar 2001
    Messaggi
    143
    Grazie mille ad entrambi.

    Ciao compaesano. Ho provato ad implementare il tuo codice (a proposito, grazie di averlo scritto appositamente per me), ma purtroppo ci sono dei malfunzionamenti.

    Se, per esempio, fino alla fine del testo non è mai comparso un punto seguìto da uno spazio o da un "accapo", mi restituisce solo la prima lettera dell'intero testo. E questo accade anche quando il testo è più corto del numoero di caratteri minimo prestabilito per l'interruzione (nel mio caso 150).

    Non sono ancora riuscito a risolvere questo problema.


    P.S.
    Il Bari ha vinto... altro che Serie C!

  6. #6
    non avevo previsto questa evenienza. Cambia l'ultima riga così:

    if($offset_minima_distanza)
    echo substr($frase, 0, $offset_minima_distanza + 1);
    else
    echo $frase;

    fammi sapere se funziona

  7. #7
    Utente di HTML.it L'avatar di puddu
    Registrato dal
    Mar 2001
    Messaggi
    143
    Ancora grazie, Gianni_T.

    Adesso funziona, solo che se per caso l'unico punto seguìto da uno spazio o da un "accapo" si trova all'interno dei 150 caratteri e non ve ne sono altri oltre i 150, l'introduzione è lunga fino al sudetto punto.
    Nel mio caso vorrei che comunque l'introduzione sia lunga fino al primo punto (valido) successivo al 150° carattere.

    Sai come potrei fare?

  8. #8
    lo script che ho postato cerca il punto più vicino ai 150 caratteri, sia che si trovi prima, sia che si trovi dopo.
    Per avere il primo punto solo dopo i 150 caratteri cambia il ciclo foreach così:

    foreach ($out[0] as $offset)
    {
    $distanza = $numero_di_caratteri - $offset[1];
    if($distanza < 0)
    {
    $offset_minima_distanza = $offset[1];
    break;
    }
    }

    la variabile $minima_distanza non serve più

    dimmi se funziona

  9. #9
    una volta conclusa la realizzazione di questo codice, proporrei di metterlo nelle pillole!!!
    Il 90% dei problemi di un pc si trova
    tra la tastiera e la sedia.

  10. #10
    [supersaibal]Originariamente inviato da hacker_nait
    una volta conclusa la realizzazione di questo codice, proporrei di metterlo nelle pillole!!! [/supersaibal]
    io veramente ne ho già approfittato

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.