[Reg-Exp] Links mit preg_replace umformen
Ben
- php
Hallo!
Auf meiner Webseite erlaube ich aus Sicherheitsgründen keine direkte Eingabe von HTML-Code. Daher ist es gedacht Bilder wie beim bekannten CMS Plone in folgender Form einzufügen:
bild-name2.jpg:img:*Bildbeschreibung*
Es sollen alle Bildnamen bestehend aus Kleinbuchstaben, Zahlen und Bindestrichen der Formate jpg,gif und png möglich sein.
Mein bishereriger Versucht sieht wie folgt aus, funktioniert jedoch leider nicht:
$message = preg_replace('/([^:]+):img:\(.*)\/sU','<img src="\1" alt="\2">',$message);
Besten Dank im Voraus!
Ben
Hallo Ben,
Es sollen alle Bildnamen bestehend aus Kleinbuchstaben, Zahlen und Bindestrichen der Formate jpg,gif und png möglich sein.
Mein bishereriger Versucht sieht wie folgt aus, funktioniert jedoch leider nicht:
$message = preg_replace('/([^:]+):img:\(.*)\/sU','<img src="\1" alt="\2">',$message);
Mit preg_replace wirst du hier nicht weiterkommen. Du benötigst die Funktion preg_replace_callback().
Auch dein Regex lässt sich verbessern: /([a-z0-9-]+.(gif|jpg|png))?:img:\(.*)\/sU
Dein Funktionsaufruf müsste dann so aussehen:
$message = preg_replace_callback('/([a-z0-9-]+\.(gif|jpg|png))?:img:\*(.*)\*/sU/,
create_function('$matches',
'return "<img src="{$matches[1]}" alt="{$matches[3]}">";'),
$message);
Schöne Grüße,
Johannes
gudn tach!
Mein bishereriger Versucht sieht wie folgt aus, funktioniert jedoch leider nicht:
$message = preg_replace('/([^:]+):img:\(.*)\/sU','<img src="\1" alt="\2">',$message);
das setzt voraus, dass vor dem dateinamen entweder nix mehr steht oder ein doppelpunkt, falls anderer text davor steht.
Mit preg_replace wirst du hier nicht weiterkommen.
warum?
Auch dein Regex lässt sich verbessern:
/([a-z0-9-]+.(gif|jpg|png))?:img:\(.*)\/sU
^ wozu das? ist der dateiname etwa optional?
ich wuerde noch eine kleinigkeit aendern:
die klammer mit den dateiendungen zu "(?:gif|jpg|png)" aendern, denn die explizite dateiendung wird nicht mehr verwendet beim ersetzen.
zusammengefasst wuerde ich einfach
preg_replace('/([a-z0-9-]+\.(?:gif|jpg|png)):img:\*(.*?)\*/s', '<img src="$1" alt="$2" />', $message);
verwenden. als trennzeichen zum etwaigen umgebenden normalen text darf man dann selbstverstaendlich keine kleinen buchstaben, ziffern, oder das minus-zeichen verwenden, sondern es wuerde sich z.b. das leerzeichen anbieten.
prost
seth
Hallo seth,
Mit preg_replace wirst du hier nicht weiterkommen.
warum?
Mir war im Gedächtnis, dass Backreferences in PHP nicht funktionieren. Aber offensichtlich hat mir mein Gedächtnis, da eine falsche Information übermittelt. Ich frage mich jetzt gerade nur, wie ich auf die Idee gekommen bin...
Schöne Grüße,
Johannes