Moin moin,
ich werfe mal ein Codeschnipsel hier rein:
Zuerst das Vorbereiten der Arrays:
Code:
$acronym = array();
$acronym_desc = array();
$acronym_replacement = array();
obtain_acronyms_list($acronym, $acronym_desc);
for ($i = 0; $i < count($acronym); $i++)
{
$acronym_replacement[] = $acronym_desc[$i];
$acronym[$i] = '#\b('. str_replace('\*', '\w*?', preg_quote($acronym[$i], '#')) .')\b#i';
}
obtain_acronyms_list() ist eine Funktion welches einfach alle Akronyme und Beschreibungen in die entsprechenden Variablen schreibt. Bei mir geschieht das in der Datenbank.
Hier das Ersetzen:
Code:
if (count($acronym))
{
$segments = preg_split('#(<a.+?</a>)|(<img.+?>)#s' , $message, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$message = '';
foreach ($segments as $seg)
{
if ((strpos($seg, '<a') === false) && (strpos($seg, '<img') === false) && ($seg[0] != '['))
{
$message .= str_replace('\"', '"', substr(@preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "@preg_replace(\$acronym, \$acronym_replacement, '\\0')", '>'. $seg .'<'), 1, -1));
}
else
{
$message .= $seg;
}
}
unset($segments);
}
Kurze Erklaerung: Zuerst spalten wir den Text um nicht in Link- oder img-Tags zu ersetzen. Anaschliessend ersetzen wir im Text.
Noch kuerzere Erklaerung: PHP-Referenz
Vorsicht: Eine Akronymbeschreibung darf
auf keinen Fall ein anderes Akronym beinhalten. Glaubt mir, das wird nicht schoen.
Greetz
alcaeus