CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
06.09.2007, 20:02:01
|
Anfänger
|
|
Registriert seit: Sep 2007
Beiträge: 12
|
|
ereg_replace funktioniert nicht
Hallo zusammen,
dies ist meine erste Frage in diesem Forum. Zuerst mal zum Hintergrund: Der User soll Texte auf seiner Internetseite selber updaten können. Die Eingabe erfolgt über textareas, die Speicherung übernimmt eine MySQL-Datenbank. Das klappt alles kanz gut. Bei der Texteingabe sollen dem User keine HTML tags gestattet sein, bzw. ich eliminiere diese später mit strip_tags($text). Es sollen aber dennoch einige einfache Formatierungen möglich sein (fett, kursiv, Zeilenwechsel, emailadresse und webadresse). Auch das ist noch kein Problem: Mit einer kleinen Javascript-Funktion kann der User die Formatierung direkt im Textfeld bei der Eingabe vornehmen; das ganze sieht dann so aus:
HTML-Code:
[URL=http://www.google.de]google dochmal[/URL]
Im Prinzip funktioniert das ganz ähnlich wie bei der Texteingabe hier in diesem Forum. Jetzt kommt mein Problem: Bei der Ausgabe der Seite, soll das natürlich in normales HTML konvertiert werden. Ich habe hierzu (in mühsamer Kleinarbeit) die folgende Anweisung zusammengebastelt:
Code:
$text = ereg_replace("(\[URL\=)(.*)(\])(.*)(\[/URL\])", "<a href=\\2 target=_blank>\\4</a>", $text);
Das funktioniert aber nur dann, wenn in dem eingegebenen Text nur eine einzige zu ersetzende URL vorkommt. Bei mehreren URLs gibts "Kraut und Rüben". Ich stelle hier schon seit Stunden alles um und bekomme das nicht hin. Habe auch schon alles mögliche zu RegEx u.ä. gelesen, aber irgendwie sehe ich nur noch slashes und Sternchen...
vielleicht kann jemand helfen?
fab
|
06.09.2007, 22:17:48
|
|
AW: ereg_replace funktioniert nicht
|
06.09.2007, 22:21:21
|
|
Junior Member
|
|
Registriert seit: Mar 2006
Beiträge: 415
|
|
AW: ereg_replace funktioniert nicht
Das liegt daran, dass die Regex Auswertung gierig ist. Wenn Du mal durch ersetzt müsste es gehen. Dann darf zwischen dem [URL] Einschluß keine eckige öffnende Klammer auftauchen.
__________________
Bitte sprich entweder deutsch oder englisch mit mir, aber nicht beides gleichzeitig.
----------
Bitte vor dem Fragen lesen: Wie man Fragen richtig stellt.
Geändert von z0iD (07.09.2007 um 08:01:08 Uhr)
Grund: Rechtschr.
|
06.09.2007, 23:42:41
|
Anfänger
|
|
Registriert seit: Sep 2007
Beiträge: 12
|
|
AW: ereg_replace funktioniert nicht
Vielen Dank!
das hilft mir schon mal echt weiter. Irgendwie muss man bei diesen Regulären Ausdrücken auf eine Art denken, mit der ich Probleme habe...
fab
|
07.09.2007, 08:19:27
|
|
Junior Member
|
|
Registriert seit: Mar 2006
Beiträge: 415
|
|
AW: ereg_replace funktioniert nicht
Das Problem dabei ist natürlich dass Du dann soetwas nicht machen kannst:
Code:
(url=http://domain.de)text (b)fetter text(/b) noch ein text(/url)
Wenn Du soetwas zulassen möchtest, wirds noch ein bisschen schwerer und der Ausdruck länger. Du musst dann ausschließen dann die Zeichenkette innherhalb auftaucht. Das bedeutet im Konkreten:
Es darf (/url auftreten, solange danach ein Zeichen kommt, welches von ) verschieden ist.
Es darf (/ur*) auftreten, solange * eine von l verschiedene Zeichen kette ist.
usw.
Du stößt da auf das größte Problem, was man mit REGEX bekommen kann, undzwar, wenn man versucht, eine ganze Zeichenkette auszuschließen.
___
Anm.: Ich habe die eckigen Klammern mal durch runde ersetzt.
__________________
Bitte sprich entweder deutsch oder englisch mit mir, aber nicht beides gleichzeitig.
----------
Bitte vor dem Fragen lesen: Wie man Fragen richtig stellt.
Geändert von z0iD (07.09.2007 um 08:28:13 Uhr)
Grund: BB Fehlinterpretation
|
07.09.2007, 09:22:48
|
Anfänger
|
|
Registriert seit: Sep 2007
Beiträge: 12
|
|
AW: ereg_replace funktioniert nicht
Hallo z0iD,
Danke nochmal für die weitere Info! Den Code von gestern habe ich eingebunden und auch verstanden (denke ich). Die Problematik, die du ansprichst, ist mir klar und ich werde versuchen, das dementsprechend weiterzuentwickeln. Vielleicht finde ich ja noch eine gute Dokumentation zu dem Thema. Jetzt bin ich erst mal froh, dass das so geht, wie ich es mir vorgestellt hatte...
fab
|
07.09.2007, 11:31:01
|
|
Junior Member
|
|
Registriert seit: Mar 2006
Beiträge: 415
|
|
AW: ereg_replace funktioniert nicht
Da ich schon lange nach einer Lösung dafür suche, habe ich nochmal drüber nachgedacht. Ich denke der Text zwischen den Klammern müsste durch folgenden Ausdruck korrekt erkannt werden;
Code:
(a) (b) (c) (d) (---e---)
( ([^[]*) ((\[ ( [^/] | /[^u] | /u[^r] | /ur[^l] | /url[^\]] ) )?) )*
Da es schwer wahrnehmbar ist, der Versuch einer Erläuterung:
Zunächst dürfen beliebig viele Zeichen kommen, die keine öffnende eckige Klammer sind (a).
Wird jedoch ein Zeichen gelesen, welches eine solche Klammer ist (b), so müssen bestimmte Bedingungen erfüllt sein, undzwar, darf das darauf folgende Zeichen kein Schrägstrich sein (c). Wenn es ein Schrägstrich ist, darf ohne weiteres kein u folgen (d). So geht das dann weiter, bis man schließlich nur noch das höchste der Gefühle, nähmlich (e) zulässt.
Wenn man das dann für alle Begrenzer macht, ist man ne ganze Weile beschäftigt. Der arme Prozessor der das interpretieren darf übrigens auch :)
Einfacher hätte man es wohl, wenn man vorher (via str_replace) die ganzen Begrenzer durch atomare Sonderzeichen ersetzt. Nur dürfen jene dann nicht in dem eigentlichen Text vorkommen.
__________________
Bitte sprich entweder deutsch oder englisch mit mir, aber nicht beides gleichzeitig.
----------
Bitte vor dem Fragen lesen: Wie man Fragen richtig stellt.
|
07.09.2007, 12:51:48
|
|
AW: ereg_replace funktioniert nicht
<querschläger>
1. ereg_* ist viel lahmer als preg_*
2. egal wie, aber mit regulären Ausdrücken kann man kein "korrektes" HTML nach der auflösung der BBCodes garantieren!
3. also muß eigendlich ein echter Parser eingesetzt werden
</querschläger>
|
07.09.2007, 14:25:44
|
Anfänger
|
|
Registriert seit: Sep 2007
Beiträge: 12
|
|
AW: ereg_replace funktioniert nicht
@z0iD: Ja, Wahnsinn!
|
07.09.2007, 16:04:00
|
|
Junior Member
|
|
Registriert seit: Mar 2006
Beiträge: 415
|
|
AW: ereg_replace funktioniert nicht
Zitat:
Zitat von rambi
<querschläger>
1. ereg_* ist viel lahmer als preg_*
2. egal wie, aber mit regulären Ausdrücken kann man kein "korrektes" HTML nach der auflösung der BBCodes garantieren!
3. also muß eigendlich ein echter Parser eingesetzt werden
</querschläger>
|
Was ist XML (ich lass mal die HTML-Suppe außen vor) für eine Sprache? Ist die nicht regulär?
*denk* ... ne, richtig, kann nicht regulär sein, da sie ja wohlgeformt sein muss (für jedes öffnende Tag ein schließendes und auchnoch das korrekte, folglich braucht man einen unendlichen Speicher (Kellerspeicher)). Dann ist sie wohl nur kontextfrei, also Typ 2. Folglich kann sie also nicht von einer regulären Grammatik bzw. einem regulären Ausdruck beschrieben werden.
Allerdings klaffen manchmal Theorie und Praxis auseinander. Wenn Du nur eine endliche Verschachtelung zulässt, ist sie darstellbar (wenn auch vermutlich sehr kompliziert).
Allerdings, meinst Du mit Deinem "echten Parser" wahrscheinlich einen deterministischen endlichen Automaten. Der wiederum die selbe Ausdrucksstärke besitzt wie ein regulärer Ausdruck. Für eine Typ 2 Sprache bräuchtest Du schon nen Kellerautomaten.
Aber das mit dem ereg_ versus preg_ muss mir nochmal wer erklären. Was ist denn da der Unterschied?
__________________
Bitte sprich entweder deutsch oder englisch mit mir, aber nicht beides gleichzeitig.
----------
Bitte vor dem Fragen lesen: Wie man Fragen richtig stellt.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 14:00:57 Uhr.
|