Tagliare un testo html rispettando i tag.
Nell'utilizzo di cms per siti e blog, si è soliti utilizzare editor come TinyMCE e FCKeditor per consentire una migliore presentazione degli articoli anche a chi non è un esperto di HTML e CSS. Il testo salvato dal gestionale nel database è in questi casi un frammento di codice HTML contente i vari tag della formattazione. Spesso, soprattutto nella home page di un sito, è utile visualizzare delle anteprime degli articoli più rilevanti, contenti solo la prima parte del testo troncato dopo un "tot" di caratteri. Per far questo è necessario utilizzare delle funzioni PHP che necessariamente però comportano la rimozione di tutti i tag per non creare problemi con la loro chiusura, nel caso fosse interrotta dal taglio della stringa di testo.
La funzione PHP descritta in questo articolo (cutHtmlText) ci permette di tagliare un testo html senza perderne la formattazione, occupandosi di rimuovere o chiudere i tag rimasti aperti. Oltre naturalmente a permettere di settare la lunghezza del testo da visualizzare, consente anche altre comodissime opzioni; si può scegliere se abilitare o meno l'Html, se troncare le parole, se inserire dei caratteri (i puntini di sospensione, la dicitura "leggi tutto", etc.).Nel caso html fosse abilitato è possibile se eliminare i tag di eventuali immagini, che in alcuni template potrebbero essere inopportune e rovinare il layout. Una opzione veramente intelligente. La sistemazione finale della funzione cutHtmlText è opera di Abidibo, quì l'articolo originale nel suo blog. Ho preparato un archivio con il sorgente della funzione e una pagina con degli esempi.
Un breve cenno sulle opzioni di configurazione e le modalità di di utilizzo:
<?php /* * Make a summary from html text. * * Cuts a string to the length of $length and adds * the ending characters * if text is longer than length. * Can strip tags or control their closure * * @param string $html Html string to truncate. * @param integer $length Length of returned string, including ellipsis. * @param string $ending Ending to be appended to the trimmed string. * @param boolean $strip_tags If true, html tags are removed * @param boolean $cut_words If false, returned string will not be cut mid-word * @return string Trimmed string. */ cutHtmlText($html, $length, $ending, $strip_tags, $cut_words, $cut_images) ?>
Mi sembra giusto menzionare anche una classe PHP che attraverso un diverso approccio fa più o meno le stesse cose: Cut HTML string. Sinceramente però preferisco in questo caso specifico trattare le stringhe HTML con le espressioni regolari che scomodare PHP DOM.
L'html nel testo del commento è abilitato: i tag consentiti sono: a, em, strong, p, code, pre, quote e br.
Gli attributi dei tag utilizzabili sono title e href.












