Regex für propitären Code > HTML

Diskutiere mit über: Regex für propitären Code > HTML im Web-Programmierung Forum

  1. Saski

    Saski Thread Starter MacUser Mitglied

    Beiträge:
    650
    Zustimmungen:
    0
    Registriert seit:
    06.02.2005
    Huhu! :)

    Bin grad am überlegen. Was ist effektiver? Ich will eigene [bla]-Tags durch <bla>-Tags (HTML) ersetzen. Nach [bla]*[/bla] suchen, oder einmal nach [bla] und dann nach [/bla]?

    Saski bunny
     
  2. Theremin

    Theremin MacUser Mitglied

    Beiträge:
    100
    Zustimmungen:
    1
    Registriert seit:
    16.12.2003
    So mache ich es.

    PHP:
        function reg_express(&$html) {
            
    $html htmlspecialchars($html);
            
    $html ereg_replace("\r","",$html);
            
    $html ereg_replace("\n\n","</p><p>",$html);
            
    $html ereg_replace("\n","<br />",$html);
            
    $html ereg_replace("\[TAB]","<ul>",$html);
            
    $html ereg_replace("\[TABSTOP]","</ul>",$html);
            
    $html ereg_replace("\[L]","<li>",$html);
            
    $html ereg_replace("\[EL]","</li>",$html);
            return 
    $reg_express;
            }
     
  3. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Mit regexes in PHP habe ich ehrlich gesagt nicht so viel Erfahrung.
    Unter Perl würde mit [bla]*[/bla] das Problem entstehen, dass der * gierig (greedy) ist.
    Das heisst [bla]*[/bla] würde beim folgenden Beispiel komplett matchen:
    Code:
    [Color=blue][bla][/COLOR]eins[/bla] was anderes [bla]zwei[/bla]noch was
    neue Zeile [bla]drei[/bla]
    und so weiter
    [bla]vier[COLOR=blue][/bla][/COLOR]
    Ist vielleicht nicht das, was Du gerne hättest.
    Wie das unter PHP aussieht, kann ich nicht sicher sagen, aber ich fürchte ähnlich.

    HTH
     
  4. Brandhoff

    Brandhoff MacUser Mitglied

    Beiträge:
    401
    Zustimmungen:
    0
    Registriert seit:
    07.02.2004
    Saski, findet das auf dem Server oder lokal statt?

    Vorausgesetzt, deine Syntax folgt dem Prinzip "Spitze Klammer auf" ["Slash"] ["dein_tag"] "Spitze Klammer zu", wäre es am effizientesten, nur den Teil nach dem (optionalen) Slash zu ersetzen, also statt:
    PHP:
    $html ereg_replace("<blub>","<li>",$html);
    $html ereg_replace("</blub>","</li>",$html);
    einfach nur
    PHP:
    $html ereg_replace("blub>","li>",$html);
    ersetzt alle einleitenden und schließenden Tags in einem Rutsch.

    (Beispiel von dir wäre nett!)

    cheers

    PS: bei möglichen Überschneidungen wie <blub> und <blablub> müsste <blablub> natürlich zuerst geparst werden ...
     
    Zuletzt bearbeitet: 21.05.2005
  5. Nogger

    Nogger MacUser Mitglied

    Beiträge:
    367
    Zustimmungen:
    0
    Registriert seit:
    03.08.2004
  6. Ulfrinn

    Ulfrinn MacUser Mitglied

    Beiträge:
    6.676
    Zustimmungen:
    586
    Registriert seit:
    30.01.2005
    Du solltest RegEx verwenden, weil diese dann Fehler im Properitärcode abfangen können. Wenn du z. B. auf
    Code:
    [b][i]hello, world[/ b]
    ein normales str_replace() losläßt, wird daraus:
    Code:
    <b><i>hello, world</b>
    Und das ist kein gültiges HTML. Ein regulärer Ausdruck würde dann nur
    Code:
    <b>[i]hello, world</b>
    also gültiges HTML erzeugen.

    Hinweis: Im ersten Beispiel oben mußte ich einen Leerschritt beim schliessenden Tag setzen, weil die Forumssoftware das leider als BBCode interpretiert hat – selbst in einem Code-Block.
     
    Zuletzt bearbeitet: 21.05.2005
  7. Saski

    Saski Thread Starter MacUser Mitglied

    Beiträge:
    650
    Zustimmungen:
    0
    Registriert seit:
    06.02.2005
    Danke für eure Antworten! Werd das definitiv mit ein paar Regexen machen, geht doch viel einfacher, als da jetzt noch Irgendwas von PEAR einzubinden *g*

    @Brandhoff: Es muss aus Kompatibilitätsgründen mit eckigen Klammern sein. Wie wär's damit?
    PHP:
    $html eregi_replace("\[(.*?)b\]","<\\1b>",$html); 
    (Hab's jetzt nicht getestet)

    @Ulfrinn: Ja, das ist natürlich ein Vorteil. Aber dauert das Parsen dann nicht doppelt so lange? :(

    @Maceis: Das Fragezeichen im Schnipsel oben sorgt (soviel ich weiss) dafür, dass es nicht greedy ist :)
     
  8. Ulfrinn

    Ulfrinn MacUser Mitglied

    Beiträge:
    6.676
    Zustimmungen:
    586
    Registriert seit:
    30.01.2005
    Bzgl. der Geschwindigkeit mußt du dir wahrscheinlich nicht allzuviele Gedanken machen. Du kannst ja einfach mal testen, wie lange PHP für so eine Seite braucht – Du wirst sehen, daß das relativ schnell ist. Vorausgesetzt, du willst nicht bei jedem Aufruf die Bibel parsen. ;)
     
  9. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Ja, in Perl ist das zumindest so.
    Da musst Du allerdings dafür sorgen, dass alle vorkommen ersetzt werden und nicht nur das erste.
     
  10. Nogger

    Nogger MacUser Mitglied

    Beiträge:
    367
    Zustimmungen:
    0
    Registriert seit:
    03.08.2004
    Wenn damit Code umgewandelt werden soll, der aus unsicherer Quelle kommt (Benutzereingaben), dann würde ich flugs auf Pear setzen, bevor du dir eine XSS Schwachstelle einbaust. Der Code in Pear unterliegt Qualitätsrichtlinen.

    [script src="http://www.boese.de/attacke.js"></script> <foob]
     
Die Seite wird geladen...
Ähnliche Themen - Regex propitären Code Forum Datum
HTML Code - Einbindung in Joomla möglich ? Web-Programmierung 15.08.2014
QR-Code unkompliziert selbst erstellen Web-Programmierung 19.09.2012
Problem mit PHP und Regex.. Web-Programmierung 25.07.2012
Google Werbung im ersten Beitrag ( Code)? (phpbb3 Forum) Web-Programmierung 09.05.2011
bb Code Editor Web-Programmierung 07.05.2011

Diese Seite empfehlen

Benutzerdefinierte Suche