• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/text.php
  • Класс: BitrixImText
  • Вызов: Text::parseLegacyFormat
static function parseLegacyFormat($text, $params = Array())
{
	if (!$text)
	{
		return '';
	}

	$safeParam = $params['SAFE'] ?? null;
	$linkParam = $params['LINK'] ?? null;
	$fontParam = $params['FONT'] ?? null;
	$smilesParam = $params['SMILES'] ?? null;
	$textAnchorParam = $params['TEXT_ANCHOR'] ?? null;
	$linkLimitParam = $params['LINK_LIMIT'] ?? null;
	$textLimitParam = $params['TEXT_LIMIT'] ?? null;
	$linkTargetSelfParam = $params['LINK_TARGET_SELF'] ?? null;
	$cutStrikeParam = $params['CUT_STRIKE'] ?? null;

	if (!$safeParam || $safeParam === 'Y')
	{
		$text = htmlspecialcharsbx($text);
	}

	$allowTags = [
		'HTML' => 'N',
		'USER' => 'N',
		'ANCHOR' => $linkParam === 'N' ? 'N' : 'Y',
		'BIU' => 'Y',
		'IMG' => 'N',
		'QUOTE' => 'N',
		'CODE' => 'N',
		'FONT' => $fontParam === 'Y' ? 'Y' : 'N',
		'LIST' => 'N',
		'SPOILER' => 'N',
		'SMILES' => $smilesParam === 'N' ? 'N' : 'Y',
		'EMOJI' => 'Y',
		'NL2BR' => 'Y',
		'VIDEO' => 'N',
		'TABLE' => 'N',
		'CUT_ANCHOR' => 'N',
		'SHORT_ANCHOR' => 'N',
		'ALIGN' => 'N',
		'TEXT_ANCHOR' => $textAnchorParam === 'N' ? 'N' : 'Y',
	];

	$parseId = md5('legacy'.$linkParam.$smilesParam.$linkLimitParam.$textLimitParam.$linkTargetSelfParam);
	if (isset(self::$parsers[$parseId]))
	{
		$parser = self::$parsers[$parseId];
	}
	else
	{
		$parser = new CTextParser();
		$parser->serverName = Common::getPublicDomain();
		$parser->maxAnchorLength = intval($linkLimitParam)? $linkLimitParam: 55;
		$parser->maxStringLen = intval($textLimitParam);
		$parser->allow = $allowTags;
		if ($linkTargetSelfParam === 'Y')
		{
			$parser->link_target = "_self";
		}

		self::$parsers[$parseId] = $parser;
	}

	$text = preg_replace_callback("/[PUT(?:=(.+?))?](.+?)?[/PUT]/i", Array('BitrixImText', 'setReplacement'), $text);
	$text = preg_replace_callback("/[SEND(?:=(.+?))?](.+?)?[/SEND]/i", Array('BitrixImText', 'setReplacement'), $text);
	$text = preg_replace_callback("/[CODE](.*?)[/CODE]/si", Array('BitrixImText', 'setReplacement'), $text);
	$text = preg_replace_callback("/[USER=([0-9]{1,})][/USER]/i", Array('BitrixImText', 'modifyShortUserTag'), $text);

	if ($cutStrikeParam === 'Y')
	{
		$text = preg_replace("/[s].*?[/s]/i", "", $text);
	}

	$text = $parser->convertText($text);

	$text = str_replace(array('#BR#', '[br]', '[BR]'), '
', $text); $text = self::recoverReplacements($text); return $text; }