X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FItem.php;h=b460d5f79fdf886364acfe50a0c7ddf99a4580e6;hb=fc0acd7b1f4723b9e45badcaae53e466e1a29b85;hp=db9fbf44f65ce40d7996b255fd48e1377dd5bf2a;hpb=8d84f33f15447e30e61d1266e378bbf6b092b4be;p=friendica.git diff --git a/src/Model/Item.php b/src/Model/Item.php index db9fbf44f6..b460d5f79f 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -2386,7 +2386,6 @@ class Item extends BaseObject public static function setHashtags(&$item) { - $tags = BBCode::getTags($item["body"]); // No hashtags? @@ -2394,6 +2393,17 @@ class Item extends BaseObject return false; } + // What happens in [code], stays in [code]! + // escape the # and the [ + // hint: we will also get in trouble with #tags, when we want markdown in posts -> ### Headline 3 + $item["body"] = preg_replace_callback("/\[code(.*?)\](.*?)\[\/code\]/ism", + function ($match) { + // we truly ESCape all # and [ to prevent gettin weird tags in [code] blocks + $find = ['#', '[']; + $replace = [chr(27).'sharp', chr(27).'leftsquarebracket']; + return ("[code" . $match[1] . "]" . str_replace($find, $replace, $match[2]) . "[/code]"); + }, $item["body"]); + // This sorting is important when there are hashtags that are part of other hashtags // Otherwise there could be problems with hashtags like #test and #test2 rsort($tags); @@ -2430,12 +2440,11 @@ class Item extends BaseObject "#$2", $item["body"]); foreach ($tags as $tag) { - if ((strpos($tag, '#') !== 0) || strpos($tag, '[url=')) { + if ((strpos($tag, '#') !== 0) || strpos($tag, '[url=') || $tag[1] == '#') { continue; } $basetag = str_replace('_',' ',substr($tag,1)); - $newtag = '#[url=' . System::baseUrl() . '/search?tag=' . $basetag . ']' . $basetag . '[/url]'; $item["body"] = str_replace($tag, $newtag, $item["body"]); @@ -2450,6 +2459,16 @@ class Item extends BaseObject // Convert back the masked hashtags $item["body"] = str_replace("#", "#", $item["body"]); + + // Remember! What happens in [code], stays in [code] + // roleback the # and [ + $item["body"] = preg_replace_callback("/\[code(.*?)\](.*?)\[\/code\]/ism", + function ($match) { + // we truly unESCape all sharp and leftsquarebracket + $find = [chr(27).'sharp', chr(27).'leftsquarebracket']; + $replace = ['#', '[']; + return ("[code" . $match[1] . "]" . str_replace($find, $replace, $match[2]) . "[/code]"); + }, $item["body"]); } public static function getGuidById($id)