Begriffe und Phrasen in einem Text verlinken (Beispiel 7)

Weitere Beispiele

Beispiel ausführen
Beispielfunktion um in einem Text Begriffe oder Phrasen zu verlinken um so z.B. interne Querverweise zu realisieren. Der Code des vorherigen Beispiels wurde hier lediglich gestrafft und mit Hilfe von temporären Funktionen in einer einzigen Funktion untergebracht. Außerdem werden jetzt Verlinkungen geschützt die bereits im Ausgangsstring enthalten sind. Ansonsten entspricht diese Funktion dem Beispiel 6.
<?php
/**
In einem Text Begriffe verlinken um Querverweise zu realisieren.
*/



function crossreference($targets$text)
{
    
$map = array();
    
$stack = array();
    
    
// bereits vorhande Verlinkungen im Text schuetzen ...
    
$success preg_match_all('#(<a.*</a>)#Ui',$text$matches);
    
    if(
$success){
        
$stack array_combine(array_map('md5'$matches[0]), $matches[0]);
        
$text str_replace($stackarray_keys($stack), $text);
    }

    foreach (
$targets as $k => $v){
        
$key2use preg_quote($k);
        
$map[$key2use] = sprintf('<a href="%s">%s</a>'$v$k);
    }
    
    
uksort($mapcreate_function('$a,$b''return strlen($a) < strlen($b);'));

    
$tmp '(\b'.join ('\b|\b'array_keys($map)).'\b)';
    
$regexp "/".$tmp."(?![^<]+>)/e";

    
$lamda create_function('$k, &$map'
                             
'$r="";
                              if (isset($map[$k])){
                                $r = $map[$k];
                                unset($map[$k]);
                              }else{
                                $r = $k;
                              }return $r;'
);
    
    
    
$s preg_replace($regexp'$lamda(\'\\1\', $map)'$text);

    
// die urspruenglichen Verlinkungen wieder einsetzen ...    
    
$s str_replace(array_keys($stack), $stack$s);
    
    return 
$s;
}



$text = <<< EOT

<a href="http://example.org">Aus einem Urwaldbaum</a> kann man viel unnützes Zeug herstellen.
Z.B. Essstäbchen, Klopapier, Schrankwände oder Fensterrahmen.
Möchte man aber etwas wirklich sinnvolles damit tun kann man 
aber auch eine <a href="http://gibson.com">Gitarre</a> daraus bauen.
Gitarre oder Urwaldbaum, da fällt die Entscheidung doch leicht, oder?
Immer noch besser als Klopapier.
<img src="/gfx/gitarre.jpg" alt="Gitarre" title="Gitarre aus einem Urwaldbaum, um ein Haar wäre aus dem Holz Klopapier geworden.">
EOT;

$targets = array(
'Urwaldbaum' => 'http://de.wikipedia.org/wiki/Urwald',
'Klopapier' => 'http://www.umwelt.org/robin-wood/german/trowa/urwaldpapier/index.htm',
'Gitarre' => 'http://de.wikipedia.org/wiki/Gitarre',
'viel' => 'http://www.pril.de',
'Zeug' => 'http://www.zeug.de',
'viel unnützes Zeug' => 'http://www.ebay.de',
'etwas wirklich sinnvolles' => 'http://www.internetabschalten.de',

);



$new crossreference($targets$text);

echo 
$new;
?>

Benutzte Funktionen


Hinweise zum DatenschutzImpressum © 2005-2008 S. Eickhoff