PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fußnoten im Text erzeugen


DiJae
29.08.2002, 12:55:50
Moin,

ich würde gerne einen String durchsuchen lassen und jedes Mal, wenn in diesem String die Folge Textpassage auftritt, die Textpassage verlinken und zwar so, dass im Link ein Counter hochgezählt wird. D.h. wenn die Folge Textpassage zum ersten Mal auftritt, soll nachher '<a href=http://www.ziel.de/index.php?$count=1>Textpassage</a>' dort stehen, beim zweiten Mal statt $count=1 $count=2, etc...
Wie ich und ersetze, ist mir klar. Was ich nicht packe, ist, den Counter hochzählen zu lassen. Habe es schon mit

if(eregi...) $count++;

versucht, aber er zählt ja dann nicht hoch. Jemand eine Lösung für dieses äußerst delikate Problem?

Gruß
Dirk

MiH
29.08.2002, 13:29:42
<?php
$patter = array("|(.*)|i");
$replace = array("<a href="gehezu.php#id=1">1</a>");
$link[] = preg_replace($patter,$replace,$text);
?>

und weiter unten gibst du dann einfach den array link aus.

for($a=0;$a<count($link);$a++){
echo $link[$a]."<br />";
}

und das sollte gehen ;)

DiJae
29.08.2002, 18:11:38
Hallo, mir war Deine Code nicht wirklich klar. Erfüllte zumindest nicht meinen Zweck. So habe ich es nun gelöst:

<?php


function linker($string)
{
// Zählerstart setzen. Gleichzeitig Index für den ersten Link
$count = 1;

// Schleife wird solange durchlaufen, wie Fußnoten im Text auftauchen
while(strchr($string,"")|| strchr($string,"")):

// Überprüpfen, ob Fußnoten Tags immer geschlossen sind
if(strpos($string,"") && strpos ($string, "")){

// Startpunkt der Fußnote und Länge ermitteln
$one = strpos($string,"");
$two = strpos ($string, "");
$start = $one+7;
$end = $two-$start;
// Fußnote ohne Tags ermitteln
$gloss= substr($string, $start, $end);

// Komplette Fußnote wird durch Link + Index ersetzt
$text ="".$gloss."";
$string = str_replace($text,"<a href=index.php?linkid=$count>$gloss</a>",$string);

// Bei Fehlern im String wird abgebrochen
}else{
return 0;
break;
}
// Counter wird hochgesetzt
$count++;

endwhile;

// Kompletter String wird wiedergegeben, wenn alles in Ordnung war
return $string;
}

// Test String
$test = "An einem wunderschönen Freitag Nachmittag, den im Monat, holte sich Frank ".
"Zwieback vom Händler in der Straße.";

// Funktion wird aufgerufen
$string = linker($test);
if($string!="0")
{
echo ($string);
}else{
// Fehlermeldung
echo("Achtung! Im Text wurden die [gloss]-Tags nicht nach Vorschrift angewandt!");
}

;

?>

Progman
29.08.2002, 21:57:43
häät mich auch gewundert wenn der code von Matt gehen würde ;)

DiJae, was du da geschrieben hast ist eigentlich nicht so toll. Du hast ja alles zu Fuß gemacht ;)

vielleicht geht der Code hier


$i=0;
$text=preg_replace( '=(.*)=Uise' , "'<a href="index.php?linkid='.++$i.'">1</a>'");
//echo('Es wurden '.$i.' umwandlungen vorgenommen');


Alles klar? *g*

DiJae
30.08.2002, 09:40:08
Hi,

ehrlich gesagt: Nein. Ich habe Deinen Code ausprobiert, aber im Text werden keine Umwandlungen vorgenommen. Nimm einfach mal meinen Textauschnitt von oben und versuche einmal, ob Du nachher das gewünschte Ergebniss bekommst. Es soll ja wieder Text ausgegeben werden, wo die [Gloss]-Tags verschwunden und durch verlinkte Textpassagen ersetzt worden sind. Und das funktioniert mit Deinem Code leider nicht. So ähnlich hatte ich es anfangs ja auch versucht...

Gruß
Dirk

Progman
30.08.2002, 16:36:31
escape mal das $ , das wird ja sonst geparst und da würde ++1 stehen ;)