Replace existing block escaping by performWitEscaped* calls
This commit is contained in:
parent
348b71d0b0
commit
0bc7b89530
2 changed files with 832 additions and 863 deletions
|
@ -1256,6 +1256,8 @@ class BBCode
|
||||||
{
|
{
|
||||||
$a = DI::app();
|
$a = DI::app();
|
||||||
|
|
||||||
|
$text = self::performWithEscapedTags($text, ['code'], function ($text) use ($try_oembed, $simple_html, $for_plaintext, $a) {
|
||||||
|
$text = self::performWithEscapedTags($text, ['noparse', 'nobb', 'pre'], function ($text) use ($try_oembed, $simple_html, $for_plaintext, $a) {
|
||||||
/*
|
/*
|
||||||
* preg_match_callback function to replace potential Oembed tags with Oembed content
|
* preg_match_callback function to replace potential Oembed tags with Oembed content
|
||||||
*
|
*
|
||||||
|
@ -1277,29 +1279,7 @@ class BBCode
|
||||||
return $return;
|
return $return;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Extracting code blocks before the whitespace processing and the autolinker
|
|
||||||
$codeblocks = [];
|
|
||||||
|
|
||||||
$text = preg_replace_callback("#\[code(?:=([^\]]*))?\](.*?)\[\/code\]#ism",
|
|
||||||
function ($matches) use (&$codeblocks) {
|
|
||||||
$return = '#codeblock-' . count($codeblocks) . '#';
|
|
||||||
if (strpos($matches[2], "\n") !== false) {
|
|
||||||
$codeblocks[] = '<pre><code class="language-' . trim($matches[1]) . '">' . htmlspecialchars(trim($matches[2], "\n\r"), ENT_NOQUOTES, 'UTF-8') . '</code></pre>';
|
|
||||||
} else {
|
|
||||||
$codeblocks[] = '<code>' . htmlspecialchars($matches[2], ENT_NOQUOTES, 'UTF-8') . '</code>';
|
|
||||||
}
|
|
||||||
|
|
||||||
return $return;
|
|
||||||
},
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
|
|
||||||
// Hide all [noparse] contained bbtags by spacefying them
|
|
||||||
// POSSIBLE BUG --> Will the 'preg' functions crash if there's an embedded image?
|
|
||||||
|
|
||||||
$text = preg_replace_callback("/\[noparse\](.*?)\[\/noparse\]/ism", 'self::escapeNoparseCallback', $text);
|
|
||||||
$text = preg_replace_callback("/\[nobb\](.*?)\[\/nobb\]/ism", 'self::escapeNoparseCallback', $text);
|
|
||||||
$text = preg_replace_callback("/\[pre\](.*?)\[\/pre\]/ism", 'self::escapeNoparseCallback', $text);
|
|
||||||
|
|
||||||
// Remove the abstract element. It is a non visible element.
|
// Remove the abstract element. It is a non visible element.
|
||||||
$text = self::stripAbstract($text);
|
$text = self::stripAbstract($text);
|
||||||
|
@ -1834,13 +1814,6 @@ class BBCode
|
||||||
$text = preg_replace("/\[mail\](.*?)\[\/mail\]/", '<a href="mailto:$1">$1</a>', $text);
|
$text = preg_replace("/\[mail\](.*?)\[\/mail\]/", '<a href="mailto:$1">$1</a>', $text);
|
||||||
$text = preg_replace("/\[mail\=(.*?)\](.*?)\[\/mail\]/", '<a href="mailto:$1">$2</a>', $text);
|
$text = preg_replace("/\[mail\=(.*?)\](.*?)\[\/mail\]/", '<a href="mailto:$1">$2</a>', $text);
|
||||||
|
|
||||||
// Unhide all [noparse] contained bbtags unspacefying them
|
|
||||||
// and triming the [noparse] tag.
|
|
||||||
|
|
||||||
$text = preg_replace_callback("/\[noparse\](.*?)\[\/noparse\]/ism", 'self::unescapeNoparseCallback', $text);
|
|
||||||
$text = preg_replace_callback("/\[nobb\](.*?)\[\/nobb\]/ism", 'self::unescapeNoparseCallback', $text);
|
|
||||||
$text = preg_replace_callback("/\[pre\](.*?)\[\/pre\]/ism", 'self::unescapeNoparseCallback', $text);
|
|
||||||
|
|
||||||
/// @todo What is the meaning of these lines?
|
/// @todo What is the meaning of these lines?
|
||||||
$text = preg_replace('/\[\&\;([#a-z0-9]+)\;\]/', '&$1;', $text);
|
$text = preg_replace('/\[\&\;([#a-z0-9]+)\;\]/', '&$1;', $text);
|
||||||
$text = preg_replace('/\&\#039\;/', '\'', $text);
|
$text = preg_replace('/\&\#039\;/', '\'', $text);
|
||||||
|
@ -1882,17 +1855,27 @@ class BBCode
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($saved_image) {
|
|
||||||
$text = self::interpolateSavedImagesIntoItemBody($text, $saved_image);
|
$text = self::interpolateSavedImagesIntoItemBody($text, $saved_image);
|
||||||
|
|
||||||
|
return $text;
|
||||||
|
}); // Escaped noparse, nobb, pre
|
||||||
|
|
||||||
|
// Remove escaping tags
|
||||||
|
$text = preg_replace("/\[noparse\](.*?)\[\/noparse\]/ism", '\1', $text);
|
||||||
|
$text = preg_replace("/\[nobb\](.*?)\[\/nobb\]/ism", '\1', $text);
|
||||||
|
$text = preg_replace("/\[pre\](.*?)\[\/pre\]/ism", '\1', $text);
|
||||||
|
|
||||||
|
return $text;
|
||||||
|
}); // Escaped code
|
||||||
|
|
||||||
|
$text = preg_replace_callback("#\[code(?:=([^\]]*))?\](.*?)\[\/code\]#ism",
|
||||||
|
function ($matches) {
|
||||||
|
if (strpos($matches[2], "\n") !== false) {
|
||||||
|
$return = '<pre><code class="language-' . trim($matches[1]) . '">' . htmlspecialchars(trim($matches[2], "\n\r"), ENT_NOQUOTES, 'UTF-8') . '</code></pre>';
|
||||||
|
} else {
|
||||||
|
$return = '<code>' . htmlspecialchars($matches[2], ENT_NOQUOTES, 'UTF-8') . '</code>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Restore code blocks
|
|
||||||
$text = preg_replace_callback('/#codeblock-([0-9]+)#/iU',
|
|
||||||
function ($matches) use ($codeblocks) {
|
|
||||||
$return = $matches[0];
|
|
||||||
if (isset($codeblocks[intval($matches[1])])) {
|
|
||||||
$return = $codeblocks[$matches[1]];
|
|
||||||
}
|
|
||||||
return $return;
|
return $return;
|
||||||
},
|
},
|
||||||
$text
|
$text
|
||||||
|
|
|
@ -167,24 +167,7 @@ class HTML
|
||||||
{
|
{
|
||||||
$message = str_replace("\r", "", $message);
|
$message = str_replace("\r", "", $message);
|
||||||
|
|
||||||
// Removing code blocks before the whitespace removal processing below
|
$message = Strings::performWithEscapedBlocks($message, '#<pre><code.*</code></pre>#iUs', function ($message) {
|
||||||
$codeblocks = [];
|
|
||||||
$message = preg_replace_callback(
|
|
||||||
'#<pre><code(?: class="language-([^"]*)")?>(.*)</code></pre>#iUs',
|
|
||||||
function ($matches) use (&$codeblocks) {
|
|
||||||
$return = '[codeblock-' . count($codeblocks) . ']';
|
|
||||||
|
|
||||||
$prefix = '[code]';
|
|
||||||
if ($matches[1] != '') {
|
|
||||||
$prefix = '[code=' . $matches[1] . ']';
|
|
||||||
}
|
|
||||||
|
|
||||||
$codeblocks[] = $prefix . PHP_EOL . trim($matches[2]) . PHP_EOL . '[/code]';
|
|
||||||
return $return;
|
|
||||||
},
|
|
||||||
$message
|
|
||||||
);
|
|
||||||
|
|
||||||
$message = str_replace(
|
$message = str_replace(
|
||||||
[
|
[
|
||||||
"<li><p>",
|
"<li><p>",
|
||||||
|
@ -404,15 +387,18 @@ class HTML
|
||||||
// Handling Yahoo style of mails
|
// Handling Yahoo style of mails
|
||||||
$message = str_replace('[hr][b]From:[/b]', '[quote][b]From:[/b]', $message);
|
$message = str_replace('[hr][b]From:[/b]', '[quote][b]From:[/b]', $message);
|
||||||
|
|
||||||
// Restore code blocks
|
return $message;
|
||||||
|
});
|
||||||
|
|
||||||
$message = preg_replace_callback(
|
$message = preg_replace_callback(
|
||||||
'#\[codeblock-([0-9]+)\]#iU',
|
'#<pre><code(?: class="language-([^"]*)")?>(.*)</code></pre>#iUs',
|
||||||
function ($matches) use ($codeblocks) {
|
function ($matches) {
|
||||||
$return = '';
|
$prefix = '[code]';
|
||||||
if (isset($codeblocks[intval($matches[1])])) {
|
if ($matches[1] != '') {
|
||||||
$return = $codeblocks[$matches[1]];
|
$prefix = '[code=' . $matches[1] . ']';
|
||||||
}
|
}
|
||||||
return $return;
|
|
||||||
|
return $prefix . PHP_EOL . trim($matches[2]) . PHP_EOL . '[/code]';
|
||||||
},
|
},
|
||||||
$message
|
$message
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue