Bilder und URLs dynamisch einbauen
crille
- php
Moin Moin!
Mittlerweile bin ich auch schon über ein halbes Jahr am PHP-Programmieren und seit den ersten Skripten wandert mir ständig ein Problem durch den Kopf, welches ich nicht lösen kann, trotz Überlegungen nach Lösungen.
Das Problem:
Ich möchte einen Newsbereich auf meiner Seite einrichten. Dieser Newsbereich wird lediglich durch 2 Eingabefelder gefüttert:
1. Überschrift des Artikel
2. Artikel
So lange der eigentliche Artikel nur Text beinhalten soll, kann man relativ einfach verfahren, indem man den Text wie folgt formatiert:
$artikel= nl2br(htmlentities($artikel));
Ich möchte aber, dass derjenige der den Text eingibt, auch an vollkommen variablen Stellen Bilder einfügen kann, indem er zum Beispiel folgendes eingibt:
------------
...Dies war der erste Bühnenauftritt:
[bild datei="buehne.jpg" text="1965 - Venice Beach"]
Bald verschafften sie...
------------
und dieses dann später wie folgt an den Browser übergeben werden soll:
------------
<p align="left"> ...Dies war der erste Bühnenauftritt:</p>
<div align="center"><img src="buehne.jpg" alt="1965 - Venice Beach"></div>
<p align="left">Bald verschafften sie...</p>
------------
Ich habe mir schon überlegt, dass der String (Artikel) nach eckigen Klammern durchsucht werden müsste, dann geguckt werden müsste, was in der eckigen Klammer steht und dann je nachdem, was dort steht umgeschrieben werden müsste. Und dann würden immernoch die Probleme bestehen, die vorher von der Funktion "htmlentities" gelöst wurden, nämlich, dass Umlaute und das "ß" nicht umgewandelt werden. Aber primäres Problem wäre wirklich "[bild datei="buehne.jpg" text="1965 - Venice Beach"]" in "<div align="center"><img src="buehne.jpg" alt="1965 - Venice Beach"></div>" umzuwandeln.
Sicherlich hat sich da schon jemand Gedanken drüber gemacht und hat auch ein paar Lösungen parat. Würde mich wirklich freuen, wenn ihr mir helfen könntet!
Danke
crille
Hi,
Ich möchte einen Newsbereich auf meiner Seite einrichten. Dieser Newsbereich wird lediglich durch 2 Eingabefelder gefüttert:
- Überschrift des Artikel
- Artikel
möglicherweise sollte auch das Datum editierbar sein; je nachdem, welcher Art dieser Newsbereich sein soll. Zumindest ist in der DB-Tabelle eine Datumsspalte unerlässlich (schon allein wegen der Sortierung).
Ich habe mir schon überlegt, dass der String (Artikel) nach eckigen Klammern durchsucht werden müsste, dann geguckt werden müsste, was in der eckigen Klammer steht und [...]
Beginnen kannst Du mit Regular Expressions, um erst mal "einfach" den <img>-Tag in das Ergebnis zu hauen. Dies kannst Du auch mit "</p><div>" davor und "</div><p>" danach verknüpfen. Ob das dauerhaft reicht, oder ob die HTML-Struktur unter anderen Bedingungen komplexer wird, kannst nur Du entscheiden - in dem Fall müsstest Du Dir überlegen, den Text tiefergehend zu analysieren und individuell auf Inhaltstypen zu reagieren.
Und dann würden immernoch die Probleme bestehen, die vorher von der Funktion "htmlentities" gelöst wurden, nämlich, dass Umlaute und das "ß" nicht umgewandelt werden.
Das ist nicht korrekt, weil Du zunächst den _gesamten_ Text durch htmlentities bearbeitest, und erst danach die Bilderkennung durchführst. Problematisch (bzw. unschön) wird es höchstens, wenn die Doublequotes ebenfalls durch " ersetzt wurden.
Cheatah
Hi Cheatah,
Danke für die schnelle Hilfe! Wie du sicherlich schon an der Frage festgestellt haben wirst, habe ich mich mit regulären Ausdrücken noch nicht auseinandergesetzt. Und wenn ich das auf den ersten Blick beurteilen kann, so sieht das Ganze ziemlich kompliziert aus! Na ja, was einen nicht unbringt, macht einen nur härter!
Danke für die Hilfe!
crille
Hi,
Wie du sicherlich schon an der Frage festgestellt haben wirst, habe ich mich mit regulären Ausdrücken noch nicht auseinandergesetzt. Und wenn ich das auf den ersten Blick beurteilen kann, so sieht das Ganze ziemlich kompliziert aus!
ja, aber man kann es lernen :-)
Im Prinzip sind reguläre Ausdrücke recht einfach. Es gibt bestimmte Symbole, die bestimmte Bedeutungen haben - beispielsweise "\s" für Whitespaces (Leerzeichen etc.), "\w" für Wortzeichen (Buchstaben, Ziffern, Unterstrich), "[]" für eine Zeichenklasse (also eines der enthaltenen Zeichen; etwa "[abc]" für entweder a oder b oder c), "+" für "mindestens eins", "?" für "eins oder keins" (nach "+" oder "*" für "sowenig wie möglich") usw. Diese werden so aneinandergereiht, dass sie genau das Muster abbilden, welches Du erkennen willst. Runde Klammern liefern Dir den gefundenen Teil zurück.
Als Beispiel:
"zehn\s(\w*?)\s?Negerlein" findet folgendes und liefert dabei zurück:
"zehn kleine Negerlein" => "kleine"
"zehn Negerlein" => ""
"zehn freie Negerlein" => "freie"
(und unendlich viel mehr, was ich hier aus Zeitgründen nicht vollständig zitieren möchte *g*)
Nur auf den ersten und zweiten Blick sieht es kompliziert aus. Schon beim dritten wird Dir klarer, was es bedeutet.
Cheatah