%PDF- %PDF-
Server IP : 37.220.80.31 / Your IP : 18.217.150.88 Web Server : Apache/2.4.52 (Ubuntu) System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64 User : www-root ( 1010) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/translate/lib/text/ |
Upload File : |
<?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. * @param string $encoding Defines encoding used in conversion. * @return string */ public static function changeCaseToLower($str, $encoding = null) { if (function_exists('mb_strtolower')) { if (empty($encoding)) { $encoding = Main\Localization\Translation::getCurrentEncoding(); } return mb_strtolower($str, $encoding); } return mb_strtolower($str); } /** * Special version of strtoupper. * @param string $str String to convert. * @param string $encoding Defines encoding used in conversion. * @return string */ public static function changeCaseToUpper($str, $encoding = null) { if (function_exists('mb_strtoupper')) { if (empty($encoding)) { $encoding = Main\Localization\Translation::getCurrentEncoding(); } return mb_strtoupper($str, $encoding); } 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) { $prevBits8and7 = 0; $isUtf = 0; foreach (unpack("C*", $string) as $byte) { $hiBits8and7 = $byte & 0xC0; if ($hiBits8and7 == 0x80) { if ($prevBits8and7 == 0xC0) { $isUtf++; } elseif (($prevBits8and7 & 0x80) == 0x00) { $isUtf--; } } elseif ($prevBits8and7 == 0xC0) { $isUtf--; } $prevBits8and7 = $hiBits8and7; } return ($isUtf > 0); } /** * 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 = '') { //Lookaround negative lookbehind (?<!ASD) if ($enclosure === "'") { $str = preg_replace("/((?<![\\\\])['{$additional}]{1})/", "\\\\$1", $str); } elseif ($enclosure === '"') { // " -> \" $str = preg_replace("/((?<![\\\\])[\"{$additional}]{1})/", "\\\\$1", $str); // $x -> \$x $str = preg_replace("/((?<![\\\\])[\$]{1}\w)/", "\\\\$1", $str); } elseif ($enclosure === '<<<') { // $x -> \$x $str = preg_replace("/((?<![\\\\])[\$]{1}\w)/", "\\\\$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 = '"') { //Lookaround positive lookbehind (?<=ASD) // (?<=[\\]+)['\"\\\$]{1} if ($enclosure == "'") { $from = ["\\'"]; $to = ["'"]; } else { $from = ["\\\$", "\\\""]; $to = ["\$", "\""]; } return str_replace($from, $to, $str); } }