Модификации ф-ий в 172 ver.

Чтобы не забыть....
Author
Message

В файле functions.php

sed_parse()

/* ------------------ */
function sed_parse($text, $parse_bbcodes=TRUE, $parse_smilies=TRUE, $parse_newlines=TRUE)
	{
	global  $cfg, $sys, $sed_smilies, $L;
	$text = sed_cc($text, null, TRUE); // New Sed 172 (for BBCode Mode & Update Mode)
	$text = ' '.$text;
	$code = array();
	$unique_seed = $sys['unique'];
	$ii = 5000;
	if ($parse_bbcodes)
		{
		$p1 = 1;
		$p2 = 1;
		while ($p1>0 && $p2>0 && $ii<5031)
			{
			$ii++;
			$p1 = mb_strpos($text, '[code]');
			$p2 = mb_strpos($text, '[/code]');
			if ($p2>$p1 && $p1>0)
				{
				$key = '**'.$ii.$unique_seed.'**';
				$code[$key]= mb_substr ($text, $p1+6, ($p2-$p1)-6);
				$code_len = mb_strlen($code[$key])+13;
				$code[$key] = str_replace('\t','&nbsp; &nbsp;', $code[$key]);
				$code[$key] = str_replace('  ', '&nbsp; ', $code[$key]);
				$code[$key] = str_replace('  ', ' &nbsp;', $code[$key]);
				$code[$key] = str_replace(
				array('{', '<', '>' , '\'', '"', "<!--", '$' ),
				array('&#123;', '&lt;', '&gt;', '&#039;', '&quot;', '"&#60;&#33;--"', '&#036;' ),$code[$key]);
				$code[$key] = "<pre>".trim($code[$key])."</pre>";
				$text = substr_replace($text, $key, $p1, $code_len);
				}
			}
		}
	if ($parse_smilies && is_array($sed_smilies))
		{
		reset($sed_smilies);
		while ((list($j,$dat) = each($sed_smilies)))
			{
			$ii++;
			$key = '**'.$ii.$unique_seed.'**';
			$code[$key]= "<img src=\"".$dat['smilie_image']."\" alt=\"\" />";
			$text = str_replace($dat['smilie_code'], $key, $text);
			}
		}
	if ($parse_bbcodes)
		{ $text = sed_bbcode($text); }
	if ($parse_bbcodes || $parse_smilies)
		{
		foreach($code as $x => $y)
			{ $text = str_replace($x, $y, $text); }
		}
	if ($parse_newlines)
		{ $text = nl2br($text); }
  return(mb_substr($text, 1));
	}

В функцию парсинга sed_parse() нарямую внедрен фильтр sed_cc()

sed_cc()

/* ------------------ */
function sed_cc($text, $ent_quotes = null, $bbmode = FALSE)
	{
	  global $cfg;
    if (($cfg['textmode']=='html') && !$bbmode)
    {
      return is_null($ent_quotes) ? htmlspecialchars($text) : htmlspecialchars($text, ENT_QUOTES);
    } else
    {
       $text = preg_replace('/&#([0-9]{2,4});/is','&&#35$1;',$text);
	     $text = str_replace(
	     array('{', '<', '>' , '$', '\'', '"', '\\', '&amp;', '&nbsp;'),
	     array('&#123;', '&lt;', '&gt;', '&#036;', '&#039;', '&quot;', '&#92;', '&amp;amp;', '&amp;nbsp;'), $text);
       return($text);
    }
	}
/* ------------------ */

При $bbmode = True функция sed_cc срабатывает для bbcode режима, даже если основной режим сайта установлен как html

Forever unshaven, red-eyed, detached from reality, with his cockroaches in my head. And let it always will be!

Предложение по модификации ф-ции sed_cutreadmore() для корректной работы с тегом [more] в режиме BBCode

function sed_cutreadmore($text, $url) {
  global $cfg, $L;
  $readmore = ($cfg['textmode']=='html') ? mb_strpos($text, "<!--readmore-->") : mb_strpos($text, "[more]");
  if ($readmore > 0)
    {
      $text = mb_substr($text, 0, $readmore)." ";
      $text .= ($cfg['textmode']=='html') ? "<span class=\"more\"><a href=\"".$url."\">".$L['ReadMore']."</a></span>" : "[br][url=".$url."]".$L['ReadMore']."[/url]";
    }
  return($text);
}

Forever unshaven, red-eyed, detached from reality, with his cockroaches in my head. And let it always will be!