php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.12.2005, 22:49  
Benutzer
 
Registriert seit: 02.01.2005
Beiträge: 49
Andun
Andun eine Nachricht über ICQ schicken
Standard BBCode Realisierung - Code

Moin

Also ich hab mein BBCode System jetzt eigentlcih komplett fertig, bis auf die Implementierung von [code].

Das Problem ist ja jetzt eigentlcih nur, dass ich nachdem ich [code] ersetzt habe usw. verhindern muss, dass zwischen den code-tags noch nach BBCodes oder Smilies gesucht wird.

Also meine Ideen waren folgende:

1. Ich zerlege den Text in Stücke mit- und ohne-BBCOde und füge sie hinterher wieder zusammen. -> Scheint mir aber uneffektiv
2. Ich mach ne Callback funktion rein, in der ich alle BBCode suche und einfache ungültig mache, so dass sie nciht mehr ersetzt werden, wenn dann nachher der ganze Text durchkämmt wird.
Ich werde wohl die 2. machen. Allerdings weiß ich noch nciht so recht, wie ich die Tags ungültig machen soll .... Die [ könnte ich vielleicht über den direkte Ascii adressierung den BBCode "Scannern" entziehen, aber wie ich dafür sorgen soll, dass evtl. Smilies nciht ersetzt werden, weiß ich beim besten Willen nicht. Irgendwie laufen meine meine Überlegungen alle darauf hinaus, dass der Text zwischen [code] zwingend nciht in die restliche Bearbeitung darf.

Wie habt ihr dass denn gelöst?

Andun

PS.: Ja, nächstes mal, mache ich vorher eine richtige Modellierung und programmiere nciht einfach drauf los. Ich dachte nciht, dass das hier so kompliziert wird.
Andun ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.12.2005, 09:10  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Wäre es zuvor nicht sinniger? Weil dann könntes du mit n RegEx der den Text Außerhalb der Code Tags matcht ... das ganze müsste allerdings rekursiv sein es sei du gehst davon aus es gibt nur einen Code Bereich im Text
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline   Mit Zitat antworten
Alt 16.12.2005, 09:22  
Benutzer
 
Registriert seit: 02.01.2005
Beiträge: 49
Andun
Andun eine Nachricht über ICQ schicken
Standard

Moin

Danke schonmal für die Antwort, aber könntest du das mit der Rekursiven Anweisung nochmal erklären?
Meinst du, ich soll also verneint auf [code] usw testen? Falls du das meinst, kannst du das etwas weiter ausführen, da ich da grade echt nen Knoten im Hirn hab.

Danke

Andun
Andun ist offline   Mit Zitat antworten
Alt 16.12.2005, 09:27  
Gast
 
Beiträge: n/a
Standard

Sorry wenn ich völlig in die falsche Richtung schiesse.

htmlspecialchars sollte doch eigentlich reichen für [code] tags?
  Mit Zitat antworten
Alt 16.12.2005, 10:04  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Zitat:
Zitat von -tanK-
htmlspecialchars sollte doch eigentlich reichen für [code] tags?
Da kann ich dir nicht folgen. Wofür sollte htmlspecialchars() bei dem speziellen Problem weiterhelfen?
xabbuh ist offline   Mit Zitat antworten
Alt 16.12.2005, 11:10  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
Zitat von Andun
Moin

Danke schonmal für die Antwort, aber könntest du das mit der Rekursiven Anweisung nochmal erklären?
als Beispiel:

Code:
<?
$text = "
Code:
b + a
Hallo Welt1
Code:
a + b
Hallo Welt2"; BBCode($text); function BBCode($text) { preg_match("/^(.*?)\[code\].*?\[\/code\](.*?)$/u", $text, $treffer); if (count($treffer) == 3) { echo "<pre>"; print_r($treffer); echo "</pre>"; if (!empty($treffer[1])) BBCode($treffer[1]); if (!empty($treffer[2])) BBCode($treffer[2]); } } ?>
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline   Mit Zitat antworten
Alt 16.12.2005, 15:06  
Benutzer
 
Registriert seit: 02.01.2005
Beiträge: 49
Andun
Andun eine Nachricht über ICQ schicken
Standard

Moin

Danke erstmal. Jetzt versteh ich überhaupt erst was du meinst ...

Das einzige Problem, was ich noch mit deinem Code habe, ist, dass du ja nirgends wieder alles zusammen setzt.
Mit print_r($treffer); gibst du ja wieder alles aus. Das ist ja nciht gewünscht. Jetzt wo ich aber das Prinzip kapiert habe, bastle ich es mal.

Ich schreib dann hier auch den Code, falls wieder mal jemand das Problem hat.

Danke

Andun
Andun ist offline   Mit Zitat antworten
Alt 16.12.2005, 15:20  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

print_r ist ja auch nur für Developer sinnvoll ("Gibt Variablen-Informationen in lesbarer Form aus") und war von ihm wohl auch nur ein Beispiel.
Zergling-new ist offline   Mit Zitat antworten
Alt 16.12.2005, 16:18  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

richtig das war nur um dir zu zeigen wie man sowas machen ... aber das ganze fertigstellen musst schon selbst...

Du kannst jetzt hingehen und kannst deinen Smilie-Parser drüberlaufen lassen.
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline   Mit Zitat antworten
Alt 16.12.2005, 20:34  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Andun
Ich schreib dann hier auch den Code, falls wieder mal jemand das Problem hat.
vielleicht hilft dir ja eine rekursive methode aus meiner templateklasse dabei weiter. ich denke, dein problem ist artverwandt.
ich suche nach bestimmten block-pattern, erzeuge dann eine neue instanz und die methode loadString() ruft dann rekursiv wieder _extractBlocks() auf:

PHP-Code:
  /**
   * Builds the template object tree of (nested) blocks, if exists.
   *
   * Replaces all matches of search pattern ($block_regex) in template
            * content with 'block_name' embedded in left and right delimiters.
   * Creates new class instance(s) with given html content(s) of search pattern.
   * This works recursive, if sub template object(s) contains nested block(s).
   */
        
private function _extractBlocks()
         {
          
// This regular expression matches block syntax:
    // html content
          
$block_regex='|(.*)|s';
          
          if(
preg_match_all($block_regex$this->content$matches))
           {
            
$class_name=get_class($this);

                  for(
$i=0$i<count($matches[0]); $i++)
                   {
                 
// matches[0][$i] contains the full pattern matched.
                 // matches[1][$i] contains the template variable/block name.
                 // matches[2][$i] contains the html content.
                 
$search=$matches[0][$i];
                 
$replace=$this->left_delimiter.$matches[1][$i].$this->right_delimiter;
                 
$this->content=str_replace($search$replace$this->content);

              
$this->blocks[$matches[1][$i]]=new $class_name();
              
$this->blocks[$matches[1][$i]]->loadString($matches[2][$i]);
                   }
           }
         } 
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Design und Code Trennen TeazY PHP Tipps 2008 29 21.05.2008 12:08
Nur bestimmten Html Code zulassen? litterauspirna PHP Tipps 2008 5 29.04.2008 12:30
BBCode mit eregi_replace(); ändert nur letztes Vorkommen Blank PHP Tipps 2006 6 12.04.2006 14:58
Bad Code aus BBCode rausfiltern Mutatos PHP Tipps 2006 4 08.01.2006 18:52
bb code in htm code wandeln janni PHP Tipps 2007 2 04.11.2005 22:36
[Erledigt] JS Code in PHP Code?? HTML, Usability und Barrierefreiheit 12 08.08.2005 15:45
[Erledigt] Lesbarkeit von Code Off-Topic Diskussionen 6 14.07.2005 14:48
code aus db mit eval replacen chief-thomson PHP Tipps 2005-2 4 08.07.2005 15:33
Fehler im Code, kann ihn nicht finden PHP Tipps 2005 9 16.05.2005 16:17
Bestätigungmail code? PHP Tipps 2005 7 16.05.2005 13:18
[Erledigt] BB Code entfernen PHP Tipps 2005 2 25.04.2005 15:20
BBCode und htmlspecialchars PHP Tipps 2005 5 21.02.2005 20:10
php code nicht parsen (bbcode) PHP Tipps 2005 2 06.02.2005 15:22
[Erledigt] bb code innerhalb von bb code geht nicht PHP Tipps 2007 2 12.01.2005 17:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
bbcode [code][/code], bbcodes realisieren, bbcode code wird ersetzt

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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.