php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.05.2006, 20:47  
Neuer Benutzer
 
Registriert seit: 06.05.2006
Beiträge: 4
St4Lk3R
St4Lk3R eine Nachricht über ICQ schicken St4Lk3R eine Nachricht über MSN schicken
Standard ein komplexeres BBCode-Problem

Nabend zusammen!

Habe gerade ein ziemliches Problem mit meiner selbstgeschriebenen BBCode-Klasse. Diese soll komplett XHTML 1.0 strict-konform sein. Um diese Konformität in jedem Fall zu gewährleisten, muss ich sicherstellen, dass im ausgegebenen HTML Inline-Elemente auf keinen Fall Block-Elemente Enthalten (bsp: <span><div>...</div></span> ist nicht konform). Dazu möchte ich die inline-BBCodes, die solche BBCodes Enthalten, die Block-Elemente erzeugen, schlicht löschen. Das erledigen soll folgende Funktion:

PHP-Code:
    function removeInlineBlock($string) {
        
// Define all inline-Elements in a multi-dimensional array.
        // [0] = start tag, [1] = end tag
        
$inlineElements = array(array("(\[b\])",          "\[/b\]"),
                                array(
"(\[i\])",          "\[/i\]"),
                                array(
"(\[u\])",          "\[/u\]"),
                                array(
"\[color=(.*?)\]",  "\[/color\]"),
                                array(
"\[size=([1-6])\]""\[/size\]"),
                                array(
"\[email=(.*?)\]",  "\[/email\]"),
                                array(
"\[url=(.*?)\]",    "\[/url\]"));
        
// Define all block-elements in an array.
        // Format: ([tag](content)[/endtag])
        
$blockElements = array("(\[center\](.*?)\[/center}\])",
                               
"(\[list(=(a|i|1)){0,1}\](.*?)\[/list\])",
                               
"(\[quote(=(.*?)){0,1}\](.*?)\[/quote\])");
        
$blockElements_str implode("|"$blockElements);
        foreach (
$inlineElements as $inlineElement) {
            
// Extract start- and end tag
            
list ($start$end) = $inlineElement;
            
// Strip off all inline-elements which contain block elements by only returning the block element
            
$regex "~$start(([[:space:]])|(\[(.*?)\])|(
))*($blockElements_str)(([[:space:]])|(\[/(.*?)\])|(
))*$end~is"
;
            
$string preg_replace($regex'$7'$string);
        }
        return 
$string;
    } 
über Hilfe würde ich mich echt freuen.
Danke im Voraus, Stalker
St4Lk3R ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 06.05.2006, 21:10  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Und was funktioniert nicht, wie hast du als Fortgeschrittener versucht den Fehler einzugrenzen?

Thread verschoben:
Anfänger Fortgeschrittene
Zergling-new ist offline  
Alt 06.05.2006, 21:35  
Neuer Benutzer
 
Registriert seit: 06.05.2006
Beiträge: 4
St4Lk3R
St4Lk3R eine Nachricht über ICQ schicken St4Lk3R eine Nachricht über MSN schicken
Standard

entschuldige bitte, dass ich in meinem ersten thread direkt mal die regeln mit füßen getreten habe. hier die weiteren informationen zu meinem post.

der regex ist so gedacht, dass zwischen dem angegebenen start- und end-tag und dem jeweiligen block-element auch noch weitere tags, whitespace oder ein html-zeilenumbruch stehen darf (der text wird vorher in der eigentlichen parse-funktion durch trim, htmlspecialchars und nl2br gejagt). ich habe den parser sowohl mit 3 tags als auch mit 2 und einem inline-tag ausserhalb eines block-elements in fast allen möglichen kombinationen ausgetestet, in keinem fall wird auch nur eines der inline-start- und / oder end-tags gelöscht.

meine vermutung ist, dass der fehler im einem der bereiche des regex zwischen start- bzw. end-tag und block-element liegt, also
entweder hier: (([[:space:]])|(\[(.*?)\])|(
))*
oder hier: (([[:space:]])|(\[/(.*?)\])|(
))*

ich bin aber leider wirklich mit meinem latein am ende.
Gruß Stalker
St4Lk3R ist offline  
Alt 08.05.2006, 13:39  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Wozu eigentlich die Schleife?

preg_replace kannst du komplette Array Strukturen übergeben ... der Index des Match ist der Index des Replace

Code:
mixed preg_replace ( mixed Suchmuster, mixed Ersatz, mixed Zeichenkette [, int Limit [, int &Anzahl]] )
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline  
Alt 08.05.2006, 14:04  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von St4Lk3R
entschuldige bitte, dass ich in meinem ersten thread direkt mal die regeln mit füßen getreten habe. hier die weiteren informationen zu meinem post.
Und du meinst mit so einem respektlosen Statement machts den Leuten Spass dir zu antworten..?
Zergling-new ist offline  
Alt 09.05.2006, 13:28  
Neuer Benutzer
 
Registriert seit: 06.05.2006
Beiträge: 4
St4Lk3R
St4Lk3R eine Nachricht über ICQ schicken St4Lk3R eine Nachricht über MSN schicken
Standard

das sollte nicht respektlos sein, sondern eine bitte um entschuldigung... habe ja meinen fehler erkannt und hoffentlich zufriedenstellend berichtigt...
St4Lk3R ist offline  
Alt 09.05.2006, 15:58  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

klang so sarkastisch..
Zergling-new ist offline  
 


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
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
Problem mit BBcode [ img ] Kein Genie PHP Tipps 2006 23 29.09.2006 14:59
BBCode - Tag verschachteln, Problem mit Reihenfolge. horstenpeter PHP Tipps 2006 4 21.08.2006 12:33
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
bbcode problem Freeaak PHP-Fortgeschrittene 8 03.05.2006 21:27
BBCode mit eregi_replace(); ändert nur letztes Vorkommen Blank PHP Tipps 2006 6 12.04.2006 14:58
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
BBCode Realisierung - Code Andun PHP-Fortgeschrittene 10 18.12.2005 21:09
[Erledigt] Problem mit BBCode PHP Tipps 2007 6 30.11.2005 17:26
[Erledigt] Problem bei Massenmails versenden mit der Funktion mail PHP-Fortgeschrittene 3 19.01.2005 13:36
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Problem mit Weiterleitung PHP Tipps 2004-2 16 22.12.2004 17:49
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34


Alle Zeitangaben in WEZ +2. Es ist jetzt 14: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.