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