Hi Lulu,
ich glaube, der Link hier ist besser, ist nämlich die Erweiterung zu dem ersten Link von Dir:
http://simplecontent.net/snippets/view/project/PHP_Snippets/03_Beispiele/01_text/link_words_6.html
Habs eingebaut und nun wird alles nur 1x verlinkt, Punkt 1-4 erledigt, juchhu! Vielen Dank, endlich geht es, nach Wochen!!!
Gruß Christian
Hier das funktionierende Script für alle anderen:
<?
Funktionen zur Geschwindigkeitsmessung des Scripts
FUNCTION S_TIMER(){list($low,$high)=SPLIT(" ",MICROTIME());$t=$high+$low;RETURN $t;}
FUNCTION E_TIMER($s){LIST($low,$high)=SPLIT(" ",MICROTIME());$t=$high+$low;$u=$t-$s;PRINTF("<hr><p>Script in %s%0.6f Sekunden berechnet</p>","",$u);RETURN $t;}
function cmp($a,$b)
{
$bool = strlen($a) < strlen($b);
return $bool;
}
function gimmeTheLink($k, &$map)
{
$r = '';
if (isset($map[$k])){
$r = $map[$k];
unset($map[$k]);
}else{
$r = $k;
}
return $r;
}
zu durchsuchender Text
$text.='<h1>Überschrift mit dem Begriff Paläo-SETI, nicht verlinkbar</h1><p>Am 14. September 1973 gründete Dr. Gene M. Phillips aus Chicago (Illinois, USA) die Ancient Astronaut Society als gemeinnützige Gesellschaft. Das Certificate of Registration des Staatssekretärs des US-Bundesstaates Illinois vom 4. Dezember 1973 hielt als Gesellschaftszweck fest: "Die AAS ist eine Organisation von Einzelpersonen und Gruppen, die sich ausschliesslich für wissenschaftliche, erzieherische und literarische Zwecke im Rahmen der Aktivitäten der Gesellschaft finden" (Dokument Nr. 22 481 1389)</p><p>Die Gesellschaft gab eine kleine Mitteilungszeitschrift mit Namen "Ancient Skies" heraus, die sich im Laufe der Jahre stark verbesserte. Anfangs war es ein vierseitiger englischsprachiger Schwarz-Weiss-Folder. Mit der Zeit nahm die Seitenzahl sukzessive zu. In den 90er Jahren wurde Ancient Skies schliesslich farbig. 1998 hatte man schliesslich ein hervorragend layoutetes 32 seitiges Farbheftchen.</p><p>Genau 25 Jahre nach Gründung benannte sich die Ancient Astronaut Society in Forschungsgesellschaft für Archäologie, Astronautik und SETI um. <b><<< Leider wird das Wort "SETI" im bereits verlinkten Begriff verlinkt (siehe Linkziel in der Statusleiste oder Quelltext), wie link :-(</b> Im September 1998 erhielten die Mitglieder erstmals "Sagenhafte Zeiten" anstelle von Ancient Skies. Mit dieser Umbenennung pensionierte sich der einstige Präsident, Dr. Gene M. Phillips, selbst. Im "Führungsteam" der A.A.S. sind heute im wesentlichen vier Personen: Erich von Däniken, als geistiger Vater der Gesellschaft sowie Ulrich Dopatka, ein Bibliothekar aus Bern, der sich mit den neuen Medien auskennt und Querverbindungen zu schaffen weiss. Desweiteren Cornelia von Däniken sowie Peter Fiebag, die gemeinsam die Redaktion der Mitgliedszeitschrift "Sagenhafte Zeiten" leiten.</p><p>Die internationale AAS wurde nach der letzten Nummer von "Ancient Skies" ebenfalls neu strukturiert. Giorgio A. Tsoukalos und Ulrich Dopatka gründeten in der Tradition der Ancient Astronaut Society die neue "Archaeology, Astronautics and SETI Research Association" die unter dem Name "legendarytimes.com" im Web zu finden ist und auch die Zeitschrift "Legendary Times" herausgibt. Sitz dieser neuen Forschungsgesellschaft ist Ithaca, New York.</p><h3>Testabsatz für Inline-Flag</h3><p>Kein AASX oder XAAS verlinken. Es gibt einen verlinkten Ort Ica in Peru, nicht aber das Ica im Wort Chicago.</p><small>© Christian Hart</small>';
zu verlinkende Glossarbegriffe (inline|Begriff)
$suchbegriffe=ARRAY(
"AAS" => "#1",
"Ancient Skies" => "#2",
"Archaeology, Astronautics and SETI Research Association" => "#3",
"Christian Hart" => "#4",
"Erich von Däniken" => "#5",
"Forschungsgesellschaft für Archäologie, Astronautik und SETI" => "#6",
"Gene M. Phillips" => "#7",
"Giorgio A. Tsoukalos" => "#8",
"Ica" => "#9",
"Legendary Times" => "#10",
"Paläo-SETI" => "#11",
"Peter Fiebag" => "#12",
"SETI" => "#13",
"Sagenhafte Zeiten" => "#14",
"Ulrich Dopatka" => "#15"
);
$start=S_TIMER();
$map = array();
foreach ($suchbegriffe as $k => $v){
$key2use = $k;
$map[$key2use] = sprintf('<a href="%s">%s</a>', $v, $k);
}
uksort($map, 'cmp');
$tmp = '(\b'.join ('\b|\b', array_keys($map)).'\b)';
alle Absätze und Aufzählungen mit {{ }} markieren
$text=PREG_REPLACE('%<(p|li)>(.*)</(p|li)>%siU',"<$1>{{$2}}</$3>",$text);
Felder mit {{ }} suchen
PREG_MATCH_ALL('/{{(.*)}}/U',$text,$felder);
gefundene {{ }} Felder zu einem zusammenfügen
$feld="";
FOREACH($felder[0] AS $treffer)
{
$feld.=$treffer;
}
$regexp = "/".$tmp."(?![^<]+>)/ie";
$feld = preg_replace($regexp,'gimmeTheLink("\1", $map)', $feld);
Feld nach }} aufsplitten
$neuesfeld=EXPLODE('}}',$feld);
Alle Felder im Text ersetzen
FOR($i=0;$i<COUNT($neuesfeld);$i++)
{
}} Klammern am Feldende wieder hinzufügen
$neuesfeld[$i].='}}';
geändertes Feld im Text ersetzen
$text=STR_REPLACE($felder[0][$i],$neuesfeld[$i],$text);
}
Feldmarkierungen entfernen
$text=PREG_REPLACE('%{{(.*)}}%siU',"$1",$text);
echo $text;
E_TIMER($start);
?>