Mit php Links ein icon voranstellen
Hallo zusammen,
Ich habe da mal ein bisschen ein komplexeres problem...
Ich arbeite gerade an einer website bei der ich den content der seite per fckeditor erstelle und dann als html in die datenbank schreibe und
entsprechend wieder auf der seite ausgebe... dies funktioniert soweit auch prima. Allerdings werden teilweise auch dateien direkt verlinkt... der upload klappt da auch jedoch macht der editor beim einfügen einen unschönen link
den ich dann immer wieder von hand ändern muss ... heist also ich möchte beim abschicken des forms bevor dieser in die datenbank geschrieben wird die links entsprechend manipulieren also sprich den namen des links in
dateiname.endung ändern und dem link ein fileicon entsprechend der endung voranstellen.
Ich habe mir da gedacht ich könnte dies mit preg_replace realisieren ...bzw mit preg_match_all allerdings bekomme ich hier kein gescheites ergebnis
<code type="php>
Links aus der Variable holen
preg_match_all('~<a[^>]*href="(.*)".*>(.*)</a>~Uis',$content,$ergebnisse);
Alle Links ausgeben
foreach ($ergebnisse as $link)
{
echo "<pre>";
print_r($link);
echo "</pre>";
}
Hier die Ausgabe davon... das obere file ist so wie ich es haben will und das untere ist so wie es der editor im moment automatisch macht.
und darunter die arrays sind die ausgabe von der php funktion ...
Hoffe ihr habt verstanden was ich eigendlich will ich kann das immer so schlecht erklären .. wenn nicht fragt unklares nochmal nach
Für eure Hilfe bin ich euch schonmal im vorraus dankbar
Gruß
Patrick
Ich habe da mal ein bisschen ein komplexeres problem...
Ich arbeite gerade an einer website bei der ich den content der seite per fckeditor erstelle und dann als html in die datenbank schreibe und
entsprechend wieder auf der seite ausgebe... dies funktioniert soweit auch prima. Allerdings werden teilweise auch dateien direkt verlinkt... der upload klappt da auch jedoch macht der editor beim einfügen einen unschönen link
den ich dann immer wieder von hand ändern muss ... heist also ich möchte beim abschicken des forms bevor dieser in die datenbank geschrieben wird die links entsprechend manipulieren also sprich den namen des links in
dateiname.endung ändern und dem link ein fileicon entsprechend der endung voranstellen.
Ich habe mir da gedacht ich könnte dies mit preg_replace realisieren ...bzw mit preg_match_all allerdings bekomme ich hier kein gescheites ergebnis
<code type="php>
Links aus der Variable holen
preg_match_all('~<a[^>]*href="(.*)".*>(.*)</a>~Uis',$content,$ergebnisse);
Alle Links ausgeben
foreach ($ergebnisse as $link)
{
echo "<pre>";
print_r($link);
echo "</pre>";
}
Hier die Ausgabe davon... das obere file ist so wie ich es haben will und das untere ist so wie es der editor im moment automatisch macht.
und darunter die arrays sind die ausgabe von der php funktion ...
Hoffe ihr habt verstanden was ich eigendlich will ich kann das immer so schlecht erklären .. wenn nicht fragt unklares nochmal nach
Für eure Hilfe bin ich euch schonmal im vorraus dankbar
Gruß
Patrick
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 122480
Url: https://administrator.de/contentid/122480
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
18 Kommentare
Neuester Kommentar
hy,
also wenn wir davon ausgehen das diese Zeile:
die generierte aus dem fck ist, und du aber
haben möchtest, dann wäre das nicht so das problem.
Du brauchst ja nur das was nach dem letzten / vorkommt nehmen.
Mit diesen 2 Zeilen erhälst du das Element nach dem letzen /
also wenn wir davon ausgehen das diese Zeile:
admin.architekt-...../.../../Architektengesetz.pdf
Architektengesetz.pdf
Du brauchst ja nur das was nach dem letzten / vorkommt nehmen.
$tmp = explode("/",$link);
$wantedLink = $tmp[count($tmp)-1];
Hm,
ich überlege grad wie man das angehen kann.
Eine möglichkeit wäre es folgendes zu machen.
Erstmal mit preg_match_all alle Links auslesen,
die Ersetzungslinks in ein array zu packen,
das ganze danach mit preg_replace zu ersetzn.
Wenn du preg_replace mit einem array bei replace fütterst, sollte er das durchlaufen und alles Vorkomnisse der Reihe nach ersetzen.
Ich hab grad keine Sources da zum testen aber theoretisch dürfte das funktionieren.
ich überlege grad wie man das angehen kann.
Eine möglichkeit wäre es folgendes zu machen.
Erstmal mit preg_match_all alle Links auslesen,
die Ersetzungslinks in ein array zu packen,
das ganze danach mit preg_replace zu ersetzn.
Wenn du preg_replace mit einem array bei replace fütterst, sollte er das durchlaufen und alles Vorkomnisse der Reihe nach ersetzen.
Ich hab grad keine Sources da zum testen aber theoretisch dürfte das funktionieren.
Hm, ich frage mich jedes Mal, warum vom Rücken durch die Brust ins Auge...?
Die Lösung lautet hier CSS...
Lonesome Walker
Die Lösung lautet hier CSS...
Lonesome Walker
Ich sach's ja, man will helfen, und dann sowas... :-p
Anyway, alleine schon aus Usability-Gründen würde ich Dir dennoch CSS ans Herz legen...
klick mich
Lonesome Walker
Anyway, alleine schon aus Usability-Gründen würde ich Dir dennoch CSS ans Herz legen...
klick mich
Lonesome Walker
Naja auch egal obs dabei ist oder nicht hab die Lösung erweitert sodass die auch mitgenommen werden
Damit dürftest du dann alle Links finden und diese auch ersetzen durch etwas was du brauchst.
Wenn noch fragen da sind einfach stellen.
gruß
$test = preg_replace('{<a[^>]href="(.*?)"(.*?)>(.*?)</a>}','{<a href="$3"$2>$3</a>}',$content);
Damit dürftest du dann alle Links finden und diese auch ersetzen durch etwas was du brauchst.
Wenn noch fragen da sind einfach stellen.
gruß
Nun ja, gewisse Sachen wirst Du aber mit PHP lösen müssen (z.B. speziellen Links spezielle Klassen zuzuweisen), damit CSS dann die nötigen Icons liefert.
Alex
Alex
Sodala,
ich konnte zwar keinen Fehler direkt feststellen, aber ich hab mir noch ein wenig den Kopf zerbrochen darüber.
Zum glück gibs eine sehr lässige Funktion die sich preg_replace_callback nennt.
Mit Hilfe derer können wir uns eine fkt anlegen mit derer Hilfe wir dann unseren Link überarbeiten können.
Ich hab hier noch eingebaut das aus der URL in dem HREF der letzte "Zipfel" abgetrennt wird ..... dürfte ersichtlich sein oder?
Probier das mal aus
ich konnte zwar keinen Fehler direkt feststellen, aber ich hab mir noch ein wenig den Kopf zerbrochen darüber.
Zum glück gibs eine sehr lässige Funktion die sich preg_replace_callback nennt.
Mit Hilfe derer können wir uns eine fkt anlegen mit derer Hilfe wir dann unseren Link überarbeiten können.
$test = preg_replace_callback('{<a[^>](.*?)href="(.*?)"(.*?)>(.*?)</a>}','reW',$content);
var_dump($test);
function reW($matches) {
$tm = explode("/",$matches[2]);
$aLink = $tm[count($tm)-1];
return "<a $matches[1] href=\"http://what/ever/you/need/$aLink\" $matches[3]>$matches[4]</a>";
}
Ich hab hier noch eingebaut das aus der URL in dem HREF der letzte "Zipfel" abgetrennt wird ..... dürfte ersichtlich sein oder?
Probier das mal aus