PHP limit text string NOT including html tags?

后端 未结 5 2240
执笔经年
执笔经年 2021-01-05 03:34

Here\'s what\'s NOT working for me:

Jack and I love         


        
5条回答
  •  半阙折子戏
    2021-01-05 04:14

    A function to truncate words in HTML code:

    //+ Jonas Raoni Soares Silva
    //@ http://jsfromhell.com
    function truncate($text, $length, $suffix = '…', $isHTML = true) {
        $i = 0;
        $simpleTags=array('br'=>true,'hr'=>true,'input'=>true,'image'=>true,'link'=>true,'meta'=>true);
        $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);
                // test if the tag is unpaired, then we mustn't save them
                if($t[0] != '/' && (!isset($simpleTags[$t])))
                    $tags[] = $t;
                elseif(end($tags) == substr($t, 1))
                    array_pop($tags);
                $i += $o[1][1] - $o[0][1];
            }
        }
    
        // output without closing tags
        $output = substr($text, 0, $length = min(strlen($text),  $length + $i));
        // closing tags
        $output2 = (count($tags = array_reverse($tags)) ? '' : '');
    
        // Find last space or HTML tag (solving problem with last space in HTML tag eg. )
        $pos = (int)end(end(preg_split('/<.*>| /', $output, -1, PREG_SPLIT_OFFSET_CAPTURE)));
        // Append closing tags to output
        $output.=$output2;
    
        // Get everything until last space
        $one = substr($output, 0, $pos);
        // Get the rest
        $two = substr($output, $pos, (strlen($output) - $pos));
        // 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]);
    
        //added to remove  unnecessary closure
        $output = str_replace('','',$output); 
    
        return $output;
    }
    

    Source: http://snippets.dzone.com/posts/show/7125

提交回复
热议问题