Markdown: Escape some elements prior to sending them through Markdown
authorMichael <heluecht@pirati.ca>
Fri, 27 Dec 2019 01:35:15 +0000 (01:35 +0000)
committerMichael <heluecht@pirati.ca>
Fri, 27 Dec 2019 01:35:15 +0000 (01:35 +0000)
markdown/markdown.php

index a5358d0..9bebf64 100644 (file)
@@ -49,5 +49,25 @@ function markdown_post_local_start(App $a, &$request) {
                return;
        }
 
+       // Elements that shouldn't be parsed
+       $elements = ['code', 'noparse', 'nobb', 'pre'];
+       foreach ($elements as $element) {
+               $request['body'] = preg_replace_callback("/\[" . $element . "\](.*?)\[\/" . $element . "\]/ism",
+                                       function ($match)  use ($element) {
+                                               return '[base64' . $element . ']' . base64_encode($match[1]) . '[/base64' . $element . ']';
+                                       },
+                                       $request['body']
+                               );
+       }
+
        $request['body'] = Markdown::toBBCode($request['body']);
+
+       foreach ($elements as $element) {
+               $request['body'] = preg_replace_callback("/\[base64" . $element . "\](.*?)\[\/base64" . $element . "\]/ism",
+                                       function ($match)  use ($element) {
+                                               return '[' . $element . ']' . base64_decode($match[1]) . '[/' . $element . ']';
+                                       },
+                                       $request['body']
+                               );
+       }
 }