aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMario <mario@mariovavti.com>2025-07-10 11:43:10 +0000
committerMario <mario@mariovavti.com>2025-07-10 11:43:10 +0000
commit9f99e401bc550c1f669c486ddcdc818bd1ff6bf7 (patch)
tree4c19a691c072cfc1b5bf3b68c903ebe18924c27e
parentd782229ba0ae2ad2186a8d70459dc20b23842dea (diff)
parentcb491c53f7cc7d8c382aadf5081f7603c1a92d4c (diff)
downloadvolse-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.php12
-rw-r--r--tests/unit/includes/MarkdownTest.php4
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\#])/','&#35;$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('&#35;','#',$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}',
+ ],
];
}