diff options
Diffstat (limited to 'include/markdown.php')
-rw-r--r-- | include/markdown.php | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/include/markdown.php b/include/markdown.php index b2adcd0d5..d2379e7ed 100644 --- a/include/markdown.php +++ b/include/markdown.php @@ -64,6 +64,12 @@ function markdown_to_bb($s, $use_zrl = false, $options = []) { // Escaping the hash tags $s = preg_replace('/\#([^\s\#])/','#$1',$s); + // Protect mentions from being mangled by the markdown parser + $s = preg_replace_callback( + '|@\{([^}]+)\}|', + fn ($matches) => '@{' . base64_encode($matches[1]) . '}', + $s); + $s = MarkdownExtra::defaultTransform($s); @@ -76,26 +82,16 @@ function markdown_to_bb($s, $use_zrl = false, $options = []) { $s = str_replace("\r","",$s); } + // Restore mentions after markdown conversion + $s = preg_replace_callback( + '|@\{([^}]+)\}|', + fn ($matches) => '@{' . base64_decode($matches[1]) . '}', + $s); + $s = str_replace('#','#',$s); $s = html2bbcode($s); - // $s = bb_code_protect($s); - - // Convert everything that looks like a link to a link - if($use_zrl) { - if (strpos($s,'[/img]') !== false) { - $s = preg_replace_callback("/\[img\](.*?)\[\/img\]/ism", 'use_zrl_cb_img', $s); - $s = preg_replace_callback("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", 'use_zrl_cb_img_x', $s); - } - $s = preg_replace_callback("/([^\]\=\{\/]|^)(https?\:\/\/)([a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]+)([\,\.\:\;]\s|$)/ismu", 'use_zrl_cb_link',$s); - } - else { - $s = preg_replace("/([^\]\=\{\/]|^)(https?\:\/\/)([a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]+)([\,\.\:\;]\s|$)/ismu", '$1[url=$2$3]$2$3[/url]$4',$s); - } - - // $s = bb_code_unprotect($s); - // remove duplicate adjacent code tags $s = preg_replace("/(\[code\])+(.*?)(\[\/code\])+/ism","[code]$2[/code]", $s); |