Baba: Bestimmten String finden

Beitrag lesen

..., nur die darin enthaltenen Tags sollten verarbeitet werden.

Ich hatte dazu mal eine kleine Funktion geschrieben: TagIdent()
Sie tut genau dies: such einen frei definierbaren Tag und finde seinen "Inhalt". Mit einer weiteren Funktion TagReplace() kann man das einfach verarbeiten.

  
<?php  
function TagIdent($string, $open, $close){  
  
  $start_pos = strpos($string, $open);  
  if(!is_int($start_pos))     return false;  
  if($start_pos < 0)          return false;  
  
  $end_pos   = strpos($string, $close, $start_pos+strlen($open)) + strlen($close);  
  if(!is_int($end_pos))       return false;  
  if($end_pos <= $start_pos)  return false;  
  
  $tag = array();  
  $tag["startpos"]   = $start_pos;  
  $tag["endpos"]     = $end_pos;  
  $tag["length"]     = $tag["endpos"] - $tag["startpos"];  
  $tag["tag"]        = substr($string, $tag["startpos"], $tag["length"]);  
  $tag["tagcontent"] = substr($tag["tag"],strlen($open),-strlen($close));  
  
  return $tag;  
  
}  
  
function TagReplace($string, $tag_old, $tag_new){  
  
  $a = strpos($string,$tag_old);  
  $o = strlen($tag_old);  
  $string = substr_replace($string, $tag_new, $a, $o);  
  
  return $string;  
  
}  
?>

Deshalb suche ich nach einem Weg, wie ich den gesamten Tag (bzw. alle vorhandenen im Text) in eine Variable bzw. Array bekomme.

Das könntest Du so ansprechen:

  
<?php  
$string = "this text contains a [link:to.a.target.html] and a [link:tohome.php]. Enjoy it.";  
  
var_dump($string);  
  
  
while($Tag = TagIdent($string, "[link:", "]")){  
  
  $string = TagReplace($string, $Tag["tag"], "<a href='".$Tag["tagcontent"]."'>".$Tag["tagcontent"]."</a>");  
  
}  
  
var_dump($string);  
?>

string 'this text contains a <to.a.target.html> and a <tohome.php>. Enjoy it.' (length=79)

string 'this text contains a <a href='to.a.target.html'>to.a.target.html</a> and a <a href='tohome.php'>tohome.php</a>. Enjoy it.' (length=121)

In der While-Schleife würdest Du dann Deinen Array bauen. Etwa: $allTags[] = $Tag["tagcontent"] oder so...

Die Funktion hat Fehlerpotential, wenn der Tag nicht sauber geschlossen wurde (aus Deiner DB).

Cheers,
Baba