HTML-Quelltext kürzen, ohne Tags zu zerschneiden, denkanstoß?

supersalzi

Erfahrenes Mitglied
Hey,
wie der Titel schon sagt, ich versuche eine Art Vorschau von Blog-Einträgen anzuzeigen. Diese Blog-Artikel enthalten mehre (unbekannte) HTML-Elemente.

Momentan zerlege ich mittels Schleife den Text mit
Code:
explode(' ', $text);
in einzelne Wörter und zähle davon eine beliebige Anzahl ab.

Anschließend werden mit strip_tags() die Tags entfernt.

Ich würde aber gern HTML-Tags wie z.B. Bilder etc. beibehalten. Mache ich dies über
Code:
strip_tags($preview_text, '<p><img><br/>');
kann es passieren, dass HTML-Tags "in sich" zerschnitten werden und somit die HTML-Syntax zerstört ist.

Ich müsste also erstmal die HTML-Tags grupieren, z.B. <p>s usw, und dann immer nur zwischen denen abschneiden, aber wie?
 
Funktioniert zwar in meinem Zusammenhang noch nicht, aber es ist evt. ein Anfang:
http://www.php.net/manual/de/function.substr.php#90724
PHP:
<?php
/**
* word-sensitive substring function with html tags awareness
* @param text The text to cut
* @param len The maximum length of the cut string
* @returns string
**/
function substrws( $text, $len=180 ) {

    if( (strlen($text) > $len) ) {

        $whitespaceposition = strpos($text," ",$len)-1;

        if( $whitespaceposition > 0 )
            $text = substr($text, 0, ($whitespaceposition+1));

        // close unclosed html tags
        if( preg_match_all("|<([a-zA-Z]+)>|",$text,$aBuffer) ) {

            if( !empty($aBuffer[1]) ) {

                preg_match_all("|</([a-zA-Z]+)>|",$text,$aBuffer2);

                if( count($aBuffer[1]) != count($aBuffer2[1]) ) {

                    foreach( $aBuffer[1] as $index => $tag ) {

                        if( empty($aBuffer2[1][$index]) || $aBuffer2[1][$index] != $tag)
                            $text .= '</'.$tag.'>';
                    }
                }
            }
        }
    }

    return $text;
}
?>
 
Hallo,

ich würde mal sagen, dass wäre beinahe eher eine Aufgabe von javascript, in dem Du das DOM-Objekt manipulierst und die enstprechenden Nodes entfernst. Da kannst Du ganz gezielt auf bestimmte Tags zugreifen und diese (samt möglichen Inhalt) entfernen.

Greetz
cw
 
Zurück