From: Alexander Ebert Date: Sun, 10 Jul 2016 20:39:35 +0000 (+0200) Subject: Work-around to convert bbcode only to HTML X-Git-Tag: 3.0.0_Beta_1~1210 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=dbcc2bde0e02a446592be280425b0ce9f37854d6;p=GitHub%2FWoltLab%2FWCF.git Work-around to convert bbcode only to HTML --- diff --git a/wcfsetup/install/files/lib/system/html/input/HtmlInputProcessor.class.php b/wcfsetup/install/files/lib/system/html/input/HtmlInputProcessor.class.php index 997f90dd76..ee16635d1d 100644 --- a/wcfsetup/install/files/lib/system/html/input/HtmlInputProcessor.class.php +++ b/wcfsetup/install/files/lib/system/html/input/HtmlInputProcessor.class.php @@ -44,7 +44,10 @@ class HtmlInputProcessor extends AbstractHtmlProcessor { $this->setContext($objectType, $objectID); // enforce consistent newlines - $html = StringUtil::unifyNewlines($html); + $html = StringUtil::trim(StringUtil::unifyNewlines($html)); + + // check if this is true HTML or just a bbcode string + $html = $this->convertToHtml($html); // transform bbcodes into metacode markers $html = HtmlBBCodeParser::getInstance()->parse($html); @@ -131,4 +134,55 @@ class HtmlInputProcessor extends AbstractHtmlProcessor { return $this->htmlInputFilter; } + + /** + * Converts bbcodes using newlines into valid HTML. + * + * @param string $html html string + * @return string parsed html string + */ + protected function convertToHtml($html) { + if (!preg_match('~^<[a-zA-Z\-]+~', $html) || !preg_match('~$~', $html)) { + $parts = preg_split('~(\n+)~', $html, null, PREG_SPLIT_DELIM_CAPTURE); + + $openParagraph = false; + $html = ''; + for ($i = 0, $length = count($parts); $i < $length; $i++) { + $part = $parts[$i]; + if (strpos($part, "\n") !== false) { + $newlines = substr_count($part, "\n"); + if ($newlines === 1) { + $html .= '
'; + } + else { + if ($openParagraph) { + $html .= '

'; + $openParagraph = false; + } + + // ignore two newline because a new paragraph with bbcodes is created + // using two subsequent newlines + $newlines -= 2; + if ($newlines === 0) { + continue; + } + + $html .= str_repeat('


', $newlines); + } + } + else { + if (!$openParagraph) { + $html .= '

'; + } + + $html .= $part; + $openParagraph = true; + } + } + + $html .= '

'; + } + + return $html; + } }