• User Attivo

    Tagliare un articolo

    Salve ragazzi ho un problema, anzi l'ho sempre avuto, vorrei poter tagliare un testo lungo di un articolo in modo che possa mostrare un anteprima,
    ora, il problema non e tanto tagliare il testo in sè, senza troncare le parole, a questo ho i l rimedio, ma vorrei che non lasciasse tags nel testo aperti, che sò uno <strong> o un >em> ecc ecc, potrei usare uno strip_tags(), ma vorrei che tenesse gli accapo, eventuali immagini ad inizio articolo ecc,

    conoscete un metodo valido?


  • ModSenior

    Ciao Khendall,
    puoi usare questa classe:
    [php]
    class String {
    public static function truncate($text, $length, $suffix = '…', $isHTML = true){
    $i = 0;
    $tags = array();
    if($isHTML){
    preg_match_all('/<[^>]+>([^<]*)/', $text, $m, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
    foreach($m as $o){
    if($o[0][1] - $i >= $length)
    break;
    $t = substr(strtok($o[0][0], " \t\n\r\0\x0B>"), 1);
    if($t[0] != '/')
    $tags[] = $t;
    elseif(end($tags) == substr($t, 1))
    array_pop($tags);
    $i += $o[1][1] - $o[0][1];
    }
    }

    	$output = substr($text, 0, $length = min(strlen($text),  $length + $i)) . (count($tags = array_reverse($tags)) ? '</' . implode('></', $tags) . '>' : '');
    	
    	// Get everything until last space
    	$one = substr($output, 0, strrpos($output, " "));
    	// Get the rest
    	$two = substr($output, strrpos($output, " "), (strlen($output) - strrpos($output, " ")));
    	// Extract all tags from the last bit
    	preg_match_all('/<(.*?)>/s', $two, $tags);
    	// Add suffix if needed
    	if (strlen($text) > $length) { $one .= $suffix; }
    	// Re-attach tags
    	$output = $one . implode($tags[0]);
    	
    	return $output;
    }
    

    }
    [/php]


  • User Attivo

    perfetto, grazie 🙂