diff options
author | Mario <mario@mariovavti.com> | 2025-07-10 11:43:10 +0000 |
---|---|---|
committer | Mario <mario@mariovavti.com> | 2025-07-10 11:43:10 +0000 |
commit | 9f99e401bc550c1f669c486ddcdc818bd1ff6bf7 (patch) | |
tree | 4c19a691c072cfc1b5bf3b68c903ebe18924c27e | |
parent | d782229ba0ae2ad2186a8d70459dc20b23842dea (diff) | |
parent | cb491c53f7cc7d8c382aadf5081f7603c1a92d4c (diff) | |
download | volse-hubzilla-9f99e401bc550c1f669c486ddcdc818bd1ff6bf7.tar.gz volse-hubzilla-9f99e401bc550c1f669c486ddcdc818bd1ff6bf7.tar.bz2 volse-hubzilla-9f99e401bc550c1f669c486ddcdc818bd1ff6bf7.zip |
Merge branch 'fix-markdown-mentions' into 'dev'
Prevent mentions from mangling by markdown parser
See merge request hubzilla/core!2211
-rw-r--r-- | include/markdown.php | 12 | ||||
-rw-r--r-- | tests/unit/includes/MarkdownTest.php | 4 |
2 files changed, 16 insertions, 0 deletions
diff --git a/include/markdown.php b/include/markdown.php index 90d671fe4..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,6 +82,12 @@ 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); diff --git a/tests/unit/includes/MarkdownTest.php b/tests/unit/includes/MarkdownTest.php index 55dbb4445..eec809174 100644 --- a/tests/unit/includes/MarkdownTest.php +++ b/tests/unit/includes/MarkdownTest.php @@ -114,6 +114,10 @@ class MarkdownTest extends UnitTestCase { 'This is a link https://example.com/some/path more info.', 'This is a link https://example.com/some/path more info.', ], + 'mention with underscores is untouched' => [ + '@{_test_@somesite.example} @{test_2_@othersite.example}', + '@{_test_@somesite.example} @{test_2_@othersite.example}', + ], ]; } |