Hallo, ich bin php-Neuling. Ich habe ein Script zum automatischen Verlinken von Keyword. Jedoch habe ich das Problem wenn Bilder <img...> </img> oder Überschriften <h1>...</h1> enthalten sind wird auch hier nach dem Keyword gesucht. Das will ich unterbinden. Das Script soll nur im reinen Text durchsuchen und dann das Keyword verlinken.
So sieht das Script aus.
Kann mir jemand dabei helfen?
So sieht das Script aus.
Code:
/** * Durchsucht den Context nach Keyword-Paaren */ public function Parse($Content) { $Options = GetOption('KeywordLinker'); if (is_array($Options)){ extract($Options); } if (!is_array($Pairs)) { return $Content; } if (is_array($this->SpecialChars)){ foreach ($this->SpecialChars as $Char => $Code){ $Content = str_replace($Code, $Char, $Content); } } $usedUrls = array(); $currentUrl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; // Jetzt machen wir die eigentliche Arbeit foreach ($Pairs as $Keyword => $Url) { // Auf die gleiche Url nur 1x verlinken if (in_array($Url, $usedUrls)) { continue; } // Wir haben die Url bereits eingefügt oder der // Autor hat sie bereits im Text genutzt if (strpos($Content, $Url)) { $usedUrls[] = $Url; continue; } // Wir verlinken nicht auf uns selbst if ($Url == $currentUrl) { $usedUrls[] = $Url; continue; } // Als erstes schauen wir, ob das "target" Attribut gesetzt wurde if (false !== strpos($Url, ' ')) { $Target = trim(substr($Url, strpos($Url, ' '))); $Target = ' target="'.$Target.'"'; $Url = substr($Url, 0, strpos($Url, ' ')); } else { $Target = ''; } // Jetzt escapten wir jedes '&' in the URL. $Url = str_replace('&', '&', $Url); $Url = str_replace('&', '&', $Url); // Natürlich möchten wir keine Keywords verlinken, die bereits verlinkt worden sind // und daher müssen wir diese erstmal filtern und kennzeichnen $Content = preg_replace('|(<a[^>]+>)(.*)('.$Keyword.')(.*)(</a[^>]*>)|Ui', '$1$2&&&$3$4$5', $Content); $Content = preg_replace('|(<[^>]*)('.$Keyword.')(.*>)|Ui', '$1&&&$2$3', $Content); if (KEYWORD_LINKER_USE_TITLES) { $Title = ' title="'.$Keyword.'"'; } // Zum Schluß noch die Keywords ersetzen $Content = preg_replace('|(?<=[\s>;"\'/])('.$Keyword.')(?=[\s<&.,!\'";:\-/])|i', '<a href="'.$Url.'" class="keywordlinker"'.$Target.$Title.'>$1</a>', $Content, 1); // Die zuvor markierten Links wieder zurücksetzen $Content = str_replace('&&&', '', $Content); } return $Content; }
Kommentar