hab es eigentlich ganz anders gelöst.
1) merke mir alle tags
2) ersetze alle tags durch die reihenfolge ihres auftretens und einen kürzel
3) highlighte nun den text (hier mit einer class)
4) ersetze nun die platzhalter von schritt 2 wieder durch die originalen tags
funktioniert einwandfrei!
codebeispiel:
PHP-Code:
function highlight($text, $highlight){
//TAGS SUCHEN
$pattern = "/<[^<>]*>/i";
preg_match_all($pattern, $text, $found);
//PSEUDOERSETZEN
foreach($found[0] as $key => $value){
$text = preg_replace ($pattern,"§".$key."§", $text,1);
}
$highlightarray = explode(" ",$highlight);
foreach($highlightarray as $tmp){
//HIGHLIGHT
$pattern= array("/(".$tmp.")/i");
$ersetzen="<span class=\"highlight\">\\1</span>";
$text = preg_replace($pattern, $ersetzen, $text);
}
//PSEUDOERSETZEN RETOUR
foreach($found[0] as $key => $value){
$pattern = "/§".$key."§/i";
$text = preg_replace ($pattern,$value, $text,1);
}
return $text;
}