From 9b2d758c1acae28c2a013fd3493c9a32d7f4fdec Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 10 Jun 2020 09:55:52 -0400 Subject: [PATCH] Add no-parsing block escaping in BBCode::setMentions --- src/Content/Text/BBCode.php | 44 ++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index 70c7eb92a9..d7fda23aeb 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -2188,34 +2188,38 @@ class BBCode */ public static function setMentions($body, $profile_uid = 0, $network = '') { - $tags = BBCode::getTags($body); + BBCode::performWithEscapedTags($body, ['noparse', 'pre', 'code'], function ($body) use ($profile_uid, $network) { + $tags = BBCode::getTags($body); - $tagged = []; - $inform = ''; + $tagged = []; + $inform = ''; - foreach ($tags as $tag) { - $tag_type = substr($tag, 0, 1); + foreach ($tags as $tag) { + $tag_type = substr($tag, 0, 1); - if ($tag_type == Tag::TAG_CHARACTER[Tag::HASHTAG]) { - continue; - } - - /* - * If we already tagged 'Robert Johnson', don't try and tag 'Robert'. - * Robert Johnson should be first in the $tags array - */ - foreach ($tagged as $nextTag) { - if (stristr($nextTag, $tag . ' ')) { - continue 2; + if ($tag_type == Tag::TAG_CHARACTER[Tag::HASHTAG]) { + continue; + } + + /* + * If we already tagged 'Robert Johnson', don't try and tag 'Robert'. + * Robert Johnson should be first in the $tags array + */ + foreach ($tagged as $nextTag) { + if (stristr($nextTag, $tag . ' ')) { + continue 2; + } } - } $success = Item::replaceTag($body, $inform, $profile_uid, $tag, $network); - if ($success['replaced']) { - $tagged[] = $tag; + if ($success['replaced']) { + $tagged[] = $tag; + } } - } + + return $body; + }); return $body; }