Peter: String intelligent kürzen

Beitrag lesen

Guten Abend,

ich stehe vor dem Problem einen String zu kürzen. Und zwar liegt das
Problem darin, die HTML-Tags dabei zu ignorieren und nur ganze Wörter
zu bahndeln.
Habe bereits verschiedene Ansätze probiert, doch führt leider keiner
zum Ziel. Im Archiv habe ich auch gestöbert, doch deckten die
gefundenen Beiträge meinen Fall nicht so recht ab.

Ich wäre dankbar, wenn sich das mal einer anschauen würde.

===Beispiel-Code===

  
Bsp:  
Alles was <a href="www.dummy.com">irgendwie</a> nützt  
         ^10        ^20        ^30        ^40        ^50  
  
Auf 20 Character gekürzt sollte herauskommen:  
Alles was irgendwie  
         ^10        ^20  

===Ansatz 1===
1. HTML-Tags entfernen.
2. Text kürzen
3. Letzte Wörter/Letztes Wort merken
4. Position des ^Wortes im echten String (der mit HMTL-Tags) ermitteln
5. anhand ^ Position kürzen
Problemfall:
Kürzen auf zum Beispiel 19 (siehe Bsp-String)
Wie kann ich verhindern, dass beim Kürzen auf 19 Character nicht der
A-Tag geöffnet bleibt und mir sämtliche folgenden Ausgaben komplett
verlinkt? (Ergebnis würde führen zu: Alles was <a href="www.dummy.com">irgendwie)

===Ansatz 2===
1. while($ok===false)
2.  Mit gewünschter Position anfangen und Text bis dorthin schneiden
3.  Überprüfen, ob String von HMTL-Tags ummantelt wird
4.  Wenn ja, dann continue() (Intervall von zB 5 Character)
5.  HTML-Tags entfernen.
6.  ^Anzuzeigende Charcater Länge auslesen
7.  Wenn Länge >= gewünschter Position
8.  => dann => String zurückgeben

===Bisheriger Code===

  
function trimString($string,$charCut)  
 {  
  /* If Length of String is less then $charCut return */  
  if($charCut>=strlen($string))  
   return $string;  
  
  /* First remove HTML-Tags in order to trim displayable String only */  
  $extStr = $this->removeHTMLTags($string);  
  $cutString = "";  
  $ind = 0;  
  while(strlen($cutString)<$charCut && $ind<$charCut)  
  {  
   $ind++;  
   echo "<br>".$charCut." - ".$cutString;  
    $cutString = substr($extStr, 0, strpos($extStr, " "));  
    $cutString = str_replace("&nbsp;", " ", $cutString);  
    $extStr = substr_replace($extStr, "&nbsp;", strpos($extStr, " "), 1);  
  }  
  
  /* We keep the last Characters of trimmed String in mind */  
  $suffix = substr($cutString,strlen($cutString)-10);  
  
  /* Search in real entire String for first Occurance of the String we kept in Mind */  
  $pos = strpos ($string, $suffix);  
  
  /* If String could not be found cut lazily and return */  
  if ($pos === false || $pos < $charCut)  
   return substr($string,0,$charCut);  
  
  return substr($string,0,$pos);  
}  

Grüße aus Berlin
Peter S.