..., 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