403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/translate/lib/text/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/translate/lib/text/stringhelper.php
<?php

namespace Bitrix\Translate\Text;

use Bitrix\Main;
use Bitrix\Translate;

/**
 * @see \Bitrix\Main\Text
 */

class StringHelper
{
	// utf8 https://www.w3.org/International/questions/qa-forms-utf-8.en
	public const UTF8_REGEXP = '/(?:
		      [\x09\x0A\x0D\x20-\x7E]            # ASCII
		    | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
		    | \xE0[\xA0-\xBF][\x80-\xBF]         # excluding overlongs
		    | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
		    | \xED[\x80-\x9F][\x80-\xBF]         # excluding surrogates
		    | \xF0[\x90-\xBF][\x80-\xBF]{2}      # planes 1-3
		    | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
		    | \xF4[\x80-\x8F][\x80-\xBF]{2}      # plane 16
		)+/xs';

	/**
	 * Special version of strlen.
	 * @param string $str String to measure.
	 * @param string $encoding Defines encoding used in conversion.
	 * @return int
	 */
	public static function getLength($str, $encoding = null)
	{
		if (Translate\Config::isUtfMode())
		{
			if (empty($encoding))
			{
				$encoding = Main\Localization\Translation::getCurrentEncoding();
			}
			return \mb_strlen($str, $encoding);
		}

		return \strlen($str);
	}

	/**
	 * Special version of substr.
	 * @param string $str String to convert.
	 * @param int $start Starting position.
	 * @param int $length Count characters to extract.
	 * @param string $encoding Defines encoding used in conversion.
	 * @return string
	 */
	public static function getSubstring($str, $start, $length, $encoding = null)
	{
		if (Translate\Config::isUtfMode())
		{
			if (empty($encoding))
			{
				$encoding = Main\Localization\Translation::getCurrentEncoding();
			}
			return \mb_substr($str, $start, $length, $encoding);
		}

		return \substr($str, $start, $length);
	}

	/**
	 * Special version of strpos.
	 * @param string $haystack String to analyze.
	 * @param string $needle String to find.
	 * @param int $offset The search offset.
	 * @param string $encoding Defines encoding used in conversion.
	 * @return bool|int
	 */
	public static function getPosition($haystack, $needle, $offset = 0, $encoding = null)
	{
		if (\function_exists('mb_strpos'))
		{
			if (empty($encoding))
			{
				$encoding = Main\Localization\Translation::getCurrentEncoding();
			}
			return \mb_strpos($haystack, $needle, $offset, $encoding);
		}

		return \strpos($haystack, $needle, $offset);
	}

	/**
	 * Special version of strtolower.
	 * @param string $str String to convert.
	 * @return string
	 */
	public static function changeCaseToLower($str)
	{
		return \mb_strtolower($str);
	}

	/**
	 * Special version of strtoupper.
	 * @param string $str String to convert.
	 * @return string
	 */
	public static function changeCaseToUpper($str)
	{
		return \mb_strtoupper($str);
	}

	/**
	 * Convert special characters to HTML entities.
	 * @param string $string The string  being converted.
	 * @param int $flags A bitmask mask which specify how to handle quotes.
	 * @param string $encoding Defines encoding used in conversion.
	 * @return string
	 */
	public static function htmlSpecialChars($string, $flags = ENT_COMPAT, $encoding = null)
	{
		if (empty($encoding))
		{
			$encoding = Main\Localization\Translation::getCurrentEncoding();
		}
		return \htmlspecialchars($string, $flags, $encoding, true);
	}

	/**
	 * Validates UTF-8 octet sequences:
	 * 0xxxxxxx
	 * 110xxxxx 10xxxxxx
	 * 1110xxxx 10xxxxxx 10xxxxxx
	 * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
	 *
	 * @param string $string
	 * @return bool
	 */
	public static function validateUtf8OctetSequences($string)
	{
		return Main\Text\Encoding::detectUtf8($string, false);
	}

	/**
	 * Escapes symbols of "'$ in given string.
	 *
	 * @param string $str String to escape.
	 * @param string $enclosure Enclosure symbol " or ' and <<< for heredoc syntax.
	 * @param string $additional Additional symbols to escape.
	 *
	 * @return string
	 */
	public static function escapePhp($str, $enclosure = '"', $additional = ''): string
	{
		$w = '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*';
		//Lookaround negative lookbehind (?<!ASD)
		if ($enclosure === "'")
		{
			$str = \preg_replace("/((?<![\\\\])['{$additional}]{1})/", "\\\\$1", $str);
			// \${end of str} -> \\
			$str = \preg_replace("/((?<![\\\\])\\\\)$/", "\\\\$1", $str);
		}
		elseif ($enclosure === '"')
		{
			// " -> \"
			$str = \preg_replace("/((?<![\\\\])[\"{$additional}]{1})/", "\\\\$1", $str);
			// $x -> \$x
			$str = \preg_replace("/((?<![\\\\])[\$]{1}$w)/", "\\\\$1", $str);
			// ${ -> \${
			$str = \preg_replace("/((?<![\\\\])[\$]{1}\s*\{)/", "\\\\$1", $str);
			// \${end of str} -> \\
			$str = \preg_replace("/((?<![\\\\])\\\\)$/", "\\\\$1", $str);
		}
		elseif ($enclosure === '<<<')
		{
			// $x -> \$x
			$str = \preg_replace("/((?<![\\\\])[\$]{1}$w)/", "\\\\$1", $str);
			// ${ -> \${
			$str = \preg_replace("/((?<![\\\\])[\$]{1}\s*\{)/", "\\\\$1", $str);
		}

		return $str;
	}

	/**
	 * Removes escape symbols in given string.
	 *
	 * @param string $str String to unescape.
	 * @param string $enclosure Enclosure symbol " or '.
	 *
	 * @return string
	 */
	public static function unescapePhp($str, $enclosure = '"'): string
	{
		//Lookaround positive lookbehind (?<=ASD)
		// (?<=[\\]+)['\"\\\$]{1}

		if ($enclosure == "'")
		{
			$from = ["\\'"];
			$to = ["'"];
		}
		else
		{
			$from = ["\\\$", "\\\""];
			$to = ["\$", "\""];
		}

		return \str_replace($from, $to, $str);
	}

	/**
	 * Validate phrase for php tokens.
	 * @param string $str
	 * @param string $enclosure
	 * @return bool
	 */
	public static function hasPhpTokens($str, $enclosure = '"'): bool
	{
		$result = false;
		if (!empty($str) && is_string($str))
		{
			if ($enclosure == '<<<')
			{
				$validTokens = [\T_CONSTANT_ENCAPSED_STRING, \T_START_HEREDOC, \T_ENCAPSED_AND_WHITESPACE, \T_END_HEREDOC];
				$validChars = [];
				$tokens = \token_get_all('<'. "?php \$MESS = <<<'HTML'\n".  $str. "\nHTML;");
			}
			else
			{
				$validTokens = [\T_CONSTANT_ENCAPSED_STRING];
				$validChars = [$enclosure];
				$tokens = \token_get_all('<'. '?php $MESS = '. $enclosure. $str. $enclosure . ';');
			}
			$cnt = count($tokens);
			if ($cnt <= 5 || $cnt > 10)
			{
				return true;
			}

			for ($inx = 5, $cnt--; $inx < $cnt ; $inx++)
			{
				$token = $tokens[$inx];
				if (is_array($token))
				{
					$token[] = \token_name($token[0]);
					if (!in_array($token[0], $validTokens))
					{
						$result = true;
						break;
					}
				}
				elseif (is_string($token))
				{
					if (!in_array($token, $validChars))
					{
						$result = true;
						break;
					}
				}

			}
		}

		return $result;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit