selfhtml.de - Alles für den Webmaster!

 

Anzeige: united-domains - Die ganze Welt der Domains

united domains - jetzt Wunsch-Domain sichern!

Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.

Jetzt Domain-Check bei united-domains!

Suche Script o.ä. zum Umwandeln von Schlagwort in Link und formatieren

Autor: Milan
Datum: 01.04.2011 20:59:14

Hallo Forengemeinde,
dies ist meine erste Frage hier, ich stelle sie im allgemeinen Teil des Forums, da ich über jeden Lösungsansatz dankbar bin (JavaScript, PHP, CGI, etc...)

Ich habe eine kleine Website, die URL anzugeben ist in meinem Fall nutzlos, da es sich um einen sehr allgemeinen Wunsch handelt und die hochgeladene Version meiner Website nicht aktuell ist.
Auf dieser Website habe ich HTML-Dateien mit langen Texten. Die Textinhalte verändern sich selten bis nie. Trotzdem hätte ich gern eine Möglichkeit, immer wiederkehrende lateinische Begriffe automatisch in Kursivschrift zu formatieren und des Weiteren andere von mir irgendwie definierte Schlagwörter automatisch in Links umzuwandeln.

Das Ganze stelle ich mir so vor:
Der Ausgangstext ist zum Beispiel:
<p>Ich bin der Ausgangstext mit diesem lateinischen Begriff und diesem Schlagwort</p>
und soll umgewandelt werden in:
<p>Ich bin der Ausgangstext mit diesem lateinischen <i>Begriff</i> und diesem <a href="http://www.example.com/kram/beliebigerlink.html">Schlagwort</a></p>

Dazu möchte ich irgendwo die Schlagwörter ablegen und den entsprechend mit ihnen verknüpften Link und in einer anderen Liste die lateinischen Begriffe, welche kursiv geschrieben werden sollen.
Wichtig ist mir, dass die hinterlegten Begriffe auch aus mehreren Wörtern bestehen können, also zum Beispiel lateinischer Begriff "irgendwas bla blubb" auch als Ganzes behandelt wird.
Dass es sich um lateinische Begriffe handelt, habe ich nur zur Veranschaulichung erwähnt, natürlich möchte ich die Begriffe frei wählen und erwarte nicht vom Script, dass es Latein beherrscht...

Ich habe nicht die geringste Ahnung von PHP, CGI, etc. aber wenn mir jemand eine solche Lösung "laiengerecht" erörtert, schaffe ich es vermutlich eine serverseitige Lösung zu realisieren.
Ansonsten wäre ich auch mit einem JavaScript zufrieden, da ich sowieso für viele andere Sachen auf der Website JavaScript verwende und auch kein Problem damit habe, dann einen Teil der User auszuschliessen; es soll sich hier nur um eine kleine zusätzliche Hilfe für den Normalo-User handeln. Ich weiss nur nicht, ob es Sinn macht, die schon beim User angekommene Seite nachträglich nochmal mit JavaScript zu verwurschteln oder ob es eleganter im Vorfeld geht?

Ich hab schon eine Weile gegoogled (bin wie gesagt ein Laie) und bin auch auf viele Lösungsansätze zum Umwandeln von Text in URL's gestoßen... aber ich suche ja etwas, was mir ein frei definierbares WORT in einen Link auf eine irgendwie hinterlegte URL umwandelt. So wie bei diesen halbwegs dezenten Werbungen, welche Text in Blogs, Foren, etc. auf Schlagwörter untersuchen und diese in Links zu unsinnigen Produkten umwandeln ;)

lG und danke vorab für's Lesen, ich habe mich sicherlich nicht sonderlich gut ausgedrückt,
Milan



Re: Suche Script o.ä. zum Umwandeln von Schlagwort in Link und formatieren

Autor: Freddy
Datum: 03.04.2011 16:47:13

Hallo,

und willkommen im Forum. :-)

> Das Ganze stelle ich mir so vor:
> Der Ausgangstext ist zum Beispiel:
> <p>Ich bin der Ausgangstext mit diesem
> lateinischen Begriff und diesem
> Schlagwort</p>
> und soll umgewandelt werden in:
> <p>Ich bin der Ausgangstext mit diesem
> lateinischen <i>Begriff</i> und
> diesem <a
> href="http://www.example.com/kram/beliebigerlink.html">Schlagwort</a></p>
>
> Dazu möchte ich irgendwo die Schlagwörter ablegen
> und den entsprechend mit ihnen verknüpften Link
> und in einer anderen Liste die lateinischen
> Begriffe, welche kursiv geschrieben werden
> sollen.

Ein Weg wäre, dies mit PHP (also serverseitig) zu realisieren.

Du könntest mit »file_get_contents('datei.html')« eine Datei in einen String einlesen und mit »str_replace()« Teile daraus ersetzen, und die Datei anschließend ausgeben.

<?php

$html = file_get_contents('datei.html');
$html = str_replace('Kasus', '<em>Kasus</em>', $html);
echo $html;

?>

Inwieweit Du dann die Struktur Deiner Seite (also Link-Struktur) umbauen musst, kann man ohne einen Blick auf die Seite geworfen zu haben. Das ist nur ein Weg, es gibt auch andere Möglichkeiten (mit und ohne PHP).

Clientseitig, etwa mit zur Hilfenahme eines JS-Frameworks wie jQuery, ist das natürlich auch möglich. Einfach den Inhalt des BODYs einlesen, und dann manipulieren:

var content = $('body').html();
content.replace(/Kasus/gi, '<em>Kasus</em>');
$('body').html(content);


Gruß + HTH,
Freddy


Re: Suche Script o.ä. zum Umwandeln von Schlagwort in Link und formatieren

Autor: Milan
Datum: 05.04.2011 00:47:29

Hallo Freddy,
Vielen Dank für deine rasche Antwort.
Die php replace-Methode hat mir gut geholfen.

Ich ersetze nun die lateinischen Begriffe auf meiner Seite (sind so Namen von Terrarientieren) durch kursive Begriffe und konnte die von dir empfohlene Methode natürlich auch direkt für das von mir gewünschte Verlinken von Schlagwörtern verwenden.

Nun habe ich weitere Fragen dazu.
Sofern dies besser im PHP-Teil geposted werden sollte, möge man mir verzeihen; ich bin den Umgang mit diesem Forum noch nicht gewöhnt und dachte mir vorläufig, es wäre sinnvoll meine weiteren Fragen hier an Ort und Stelle im bestehenden Kontext anzuhängen...

Erstens:
Meine str_replace-Funktionen sind ...irre... lang, insbesondere genau diejenige, wo ich ja eigentlich gar nichts anderes möchte, als dass mit den Begriffen in meinen Arrays nichts weiteres geschieht, als dass sie um <i>Kasus</i> ergänzt werden.
Siehe zB:
$art_o = array("Adelphobates","Allobates","Ameerega","Dendrobates","Epipedobates","Excidobates","Hyloxalus","Oophaga","Phyllobates","Ranitomeya","A. ","D. ","E. ","H. ","O. ","P. ","R. ","zaparo","bassleri","pepperi","silverstonei","trivittata","bilinguis","boliviana","cainarachi","flavopicta","hahneli","parvula","picta","smaragdina","auratus","leucomelas","tinctorius","truncatus","anthonyi","tricolor","captivus","mysteriosus","granulifera","histrionica","lehmanni","pumilio","sylvatica","vicentei","azureiventris","infraguttatus","aurotaenia","bicolor","terribilis","vittatus","bombetes","fulgurita","benedicta","duellmani","fantastica","flavovittata","imitator","lamasi","reticulata","uakarii","vanzolinii","variabilis","ventrimaculata");

$art_r = array("<i>Adelphobates</i>","<i>Allobates</i>","<i>Ameerega</i>","<i>Dendrobates</i>","<i>Epipedobates</i>","<i>Excidobates</i>","<i>Hyloxalus</i>","<i>Oophaga</i>","<i>Phyllobates</i>","<i>Ranitomeya</i>","<i>A. </i>","<i>D. </i>","<i>E. </i>","<i>H. </i>","<i>O. </i>","<i>P. </i>","<i>R. </i>","<i>zaparo</i>","<i>bassleri</i>","<i>pepperi</i>","<i>silverstonei</i>","<i>trivittata</i>","<i>bilinguis</i>","<i>boliviana</i>","<i>cainarachi</i>","<i>flavopicta</i>","<i>hahneli</i>","<i>parvula</i>","<i>picta</i>","<i>smaragdina</i>","<i>auratus</i>","<i>leucomelas</i>","<i>tinctorius</i>","<i>truncatus</i>","<i>anthonyi</i>","<i>tricolor</i>","<i>captivus</i>","<i>mysteriosus</i>","<i>granulifera</i>","<i>histrionica</i>","<i>lehmanni</i>","<i>pumilio</i>","<i>sylvatica</i>","<i>vicentei</i>","<i>azureiventris</i>","<i>infraguttatus</i>","<i>aurotaenia</i>","<i>bicolor</i>","<i>terribilis</i>","<i>vittatus</i>","<i>bombetes</i>","<i>fulgurita</i>","<i>benedicta</i>","<i>duellmani</i>","<i>fantastica</i>","<i>flavovittata</i>","<i>imitator</i>","<i>lamasi</i>","<i>reticulata</i>","<i>uakarii</i>","<i>vanzolinii</i>","<i>variabilis</i>","<i>ventrimaculata</i>");

Ähm... joa...geht das auch "etwas" eleganter? ;)
Beispielsweise durch Notation in einer db oder wenigstens irgendeiner Schleife, die mir dann jeden Eintrag des Arrays durch <i>Eintrag</i> ersetzt, statt der quasi-doppelten Notation...

Zweitens:
(Dieser Punkt ist eher marginal für mich, aber ich frage es trotzdem mal... aus Neugier heraus)
Daheim habe ich mir zum Testen xampp installiert, dieses beinhaltet eine PHP Version "5.3.5"
Mein T-Home Business Webspace-Krempel hat nur eine 4er-Version, siehe: http://dendrobat.net/phpinfo.php
Demzufolge kann ich also - wenn ich das richtig verstanden habe - auf meinem Webspace nicht die Funktion str_ireplace nutzen, weil diese erst in PHP 5.x.x implementiert wurde, richtig?
Gibt es entsprechende Work-Arounds für mich?
Dies ist mir jedoch nicht sonderlich wichtig...ich habe eigentlich immer schon auf Groß- und Kleinschreibung geachtet und habe so wenig Fälle, wo ein Substantiv einmal auch ein Teil-String eines kleingeschriebenen Adjektivs ist, dass ich diese getrost durch zusätzliche Einträge abfangen könnte...

Drittens:
Dies ist mir wiederum ausgesprochen wichtig...
Ich habe (bisher... hab mich erst ein paar Stunden in PHP eingelesen) nicht begriffen, wie ich in einem String, der JavaScript enthält, relevante Separatoren wie "'", "(" und ")" escape... das escape-Zeichen "" funktioniert in meinem Fall irgendwie nicht...
Also habe ich versucht, mir zu behelfen, indem ich die betreffenden Texte "primitiv" als "irgendwas.txt" abspeichere (Inhalt wäre dann zB:
"<a href="" onclick="Mediabox.open('")... natürlich OHNE die Anführungsstriche meines Zitates...
und mit
$js_pic_str1 = file_get_contents('irgendwas.txt');
einlese.
Wenn ich jetzt beispielsweise DREI solcher "primitiven" .txt-Dateien als Variablen einlese, als $js_pic_str1, $js_pic_str2 und $js_pic_str3 und dann versuche, die str_replace-Funktion zu benutzen, habe ich folgendes für mich kurioses Problem:
$pic_o = array("pic_start"," pic_thumb "," pic_eof");
$pic_r = array($js_pic_str1, $js_pic_str2,$js_pic_str3);
...
dann wird beim darauf folgenden str_replace
$raw = str_replace($pic_o, $pic_r, $raw);
//echo $raw wäre entsprechend die Ausgabe...
merkwürdigerweise
"pic_thumb" in meinem Ausgangstext replaced (sorry für die Anglizismen...) gegen $js_pic_str2, "pic_eof" wird auch brav durch $js_pic_str3 ersetzt...
aber der ERSTE Wert des Arrays wird einfach ignoriert und mit "" oder isempty o.ä. ersetzt. (kann ich nicht so recht evaluieren, im Quelltext der Ausgabedatei steht jedenfalls nix an der wentsprechenden Stelle...)
Wieso ist das so?
Wenn ich zur Kontrolle STATTDESSEN  einfach nur
echo $js_pic_str1;
ausgeben lasse, wird der aus der .txt-Datei eingelesene String fehlerfrei in meinen Code eingebunden. Also wird der String offenbar durchaus eingelesen...

Woran liegt das?
Ich hab' im Netz auch irgendetwas gelesen, dass man explizit angeben muss, dass Variablen, welche man ins Array packt als String interpretiert werden mittels "expose", aber "expose()" wird - zumindest von meinem Editor (ConTEXT) überhaupt nicht als php-Tag ge-highlight-ed...

Ich fass den dritten Punkt aufgrund meines laaien-haften "Gesülzes" nochmal prägnanter zusammen:

Ich hatte ein Problem, javascript-relevante Separatoren zu escapen ("'", "(", etc.) innerhalb meiner php str_replace() Funktion.
--> (Frage a) Wie würde ich dies denn korrekt notieren?)

...
und habe darum als Work-Around versucht,
die für mich nicht vernünftig zu escape-enden Strings einfach als txt-Dateien abzuspeichern und dann mit file_get_contents('entsprechende_datei.txt') wieder einzulesen.
Die Variablen, denen ich den jeweiligen Content der jeweiligen txt-Datei als String zugewiesen habe, werden auch interpretiert, AUSSER der ersten...

PS:
Wo ich hier gerade sowieso schon so Vieles erfrage, würde mich direkt noch interessieren, ob es in PHP eine standardisierte Variable gibt, die mir den Pfad des root-Directory ausgibt?
Ich ermittle den Pfad meiner Stylesheets, JavaScripts, etc. aktuell so:
// 2.) dynamischer Kopfbereich - Speicherort für css, js, etc.
if ($_GET["dd"] = "1") { //if statement
$dyndir = "";
   }    elseif ($_GET["dd"] = "2") { //elseif statement
       $dyndir = "../";
   }   elseif ($_GET["dd"] = "3") { //elseif statement
       $dyndir = "../../";
   }   elseif ($_GET["dd"] = "4") { //elseif statement
       $dyndir = "../../../";
   };
heisst, ich muss immer explizit eine Pfad-Tiefe (1,2,3,4) übergeben...
Lieber wäre mir aber, wenn es sowas wie %root%/blabla gäbe?

lG, und sorry, falls ich hier anfangs nicht in den richtigen Kategorien posten sollte,
Milán

> Hallo,
>
> und willkommen im Forum. :-)
>
> > Das Ganze stelle ich mir so vor:
> > Der Ausgangstext ist zum Beispiel:
> > <p>Ich bin der Ausgangstext mit
> diesem
> > lateinischen Begriff und diesem
> > Schlagwort</p>
> > und soll umgewandelt werden in:
> > <p>Ich bin der Ausgangstext mit
> diesem
> > lateinischen <i>Begriff</i> und
> > diesem <a
> >
> href="http://www.example.com/kram/beliebigerlink.html">Schlagwort</a></p>
> >
> > Dazu möchte ich irgendwo die Schlagwörter
> ablegen
> > und den entsprechend mit ihnen verknüpften
> Link
> > und in einer anderen Liste die lateinischen
> > Begriffe, welche kursiv geschrieben werden
> > sollen.
>
> Ein Weg wäre, dies mit PHP (also serverseitig) zu
> realisieren.
>
> Du könntest mit »file_get_contents('datei.html')«
> eine Datei in einen String einlesen und mit
> »str_replace()« Teile daraus ersetzen, und die
> Datei anschließend ausgeben.
>
> <?php
>
> $html = file_get_contents('datei.html');
> $html = str_replace('Kasus',
> '<em>Kasus</em>', $html);
> echo $html;
>
> ?>
>
> Inwieweit Du dann die Struktur Deiner Seite (also
> Link-Struktur) umbauen musst, kann man ohne einen
> Blick auf die Seite geworfen zu haben. Das ist
> nur ein Weg, es gibt auch andere Möglichkeiten
> (mit und ohne PHP).
>
> Clientseitig, etwa mit zur Hilfenahme eines
> JS-Frameworks wie jQuery, ist das natürlich auch
> möglich. Einfach den Inhalt des BODYs einlesen,
> und dann manipulieren:
>
> var content = $('body').html();
> content.replace(/Kasus/gi,
> '<em>Kasus</em>');
> $('body').html(content);
>
>
> Gruß + HTH,
> Freddy



Re: Suche Script o.ä. zum Umwandeln von Schlagwort in Link und formatieren

Autor: Milan
Datum: 05.04.2011 01:06:37

edit:
k.A. weshalb das Escape-Zeichen, welches ich hier in meinem Post geschrieben habe, offenbar nicht ausgegeben wird. Ich meine den normalen Backslash, wie er auch zum escapen von " verwendet wird. ...nur um eventuellen Antworten zu einer fehlerhaften Notation meinerseits vorzubeugen...

lG,
Milán