SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Websites optimieren für Google & Co.

Websites optimieren für Google & Co. zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 06.09.2007, 20:02:01
fab fab ist offline
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
Mit Zitat antworten
  #2  
Alt 06.09.2007, 22:17:48
rambi
Guest
 
Beiträge: n/a
AW: ereg_replace funktioniert nicht

http://www.christian-seiler.de/projekte/php/bbcode/
Mit Zitat antworten
  #3  
Alt 06.09.2007, 22:21:21
Benutzerbild von z0iD
z0iD z0iD ist offline
Junior Member
 
Registriert seit: Mar 2006
Beiträge: 415
z0iD eine Nachricht über ICQ schicken
AW: ereg_replace funktioniert nicht

Das liegt daran, dass die Regex Auswertung gierig ist. Wenn Du mal
Code:
.*
durch
Code:
[^[]*
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.
Mit Zitat antworten
  #4  
Alt 06.09.2007, 23:42:41
fab fab ist offline
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
Mit Zitat antworten
  #5  
Alt 07.09.2007, 08:19:27
Benutzerbild von z0iD
z0iD z0iD ist offline
Junior Member
 
Registriert seit: Mar 2006
Beiträge: 415
z0iD eine Nachricht über ICQ schicken
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
Code:
[/url]
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 Zeichenkette 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
Mit Zitat antworten
  #6  
Alt 07.09.2007, 09:22:48
fab fab ist offline
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
Mit Zitat antworten
  #7  
Alt 07.09.2007, 11:31:01
Benutzerbild von z0iD
z0iD z0iD ist offline
Junior Member
 
Registriert seit: Mar 2006
Beiträge: 415
z0iD eine Nachricht über ICQ schicken
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.
Mit Zitat antworten
  #8  
Alt 07.09.2007, 12:51:48
rambi
Guest
 
Beiträge: n/a
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>
Mit Zitat antworten
  #9  
Alt 07.09.2007, 14:25:44
fab fab ist offline
Anfänger
 
Registriert seit: Sep 2007
Beiträge: 12
AW: ereg_replace funktioniert nicht

@z0iD: Ja, Wahnsinn!
Mit Zitat antworten
  #10  
Alt 07.09.2007, 16:04:00
Benutzerbild von z0iD
z0iD z0iD ist offline
Junior Member
 
Registriert seit: Mar 2006
Beiträge: 415
z0iD eine Nachricht über ICQ schicken
AW: ereg_replace funktioniert nicht

Zitat:
Zitat von rambi Beitrag anzeigen
<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.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Bild als Blob in DB - Ausgabe funktioniert nicht ceptar PHP Grundlagen 6 19.02.2006 18:15:33
Bildupload funktioniert lokal, online aber nicht 8805-evergreen. PHP Grundlagen 11 09.02.2006 15:55:48
TXT-Datei splitten, funktioniert nicht mit Leerstellen BenjaminG PHP Grundlagen 11 29.06.2005 17:08:04
Eintrag aus DB lesen - funktioniert nur teilweise exweised PHP Grundlagen 4 07.09.2004 12:04:25
prüfen unter welcher Endung PHP funktioniert... FourSix Off Topic Area 4 10.04.2003 23:37:28


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:00:57 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt