c" * - корректно обрабатывается "грязный" html, когда в значениях атрибутов тагов могут встречаться символы < > * - корректно обрабатывается разбитый html * - вырезаются комментарии, скрипты, стили, PHP, Perl, ASP код, MS Word таги, CDATA * - автоматически форматируется текст, если он содержит html код * - защита от подделок типа: "<script>alert('hi')script>" * * @param string $s * @param array $allowable_tags Массив тагов, которые не будут вырезаны * Пример: 'b' -- таг останется с атрибутами, '' -- таг останется без атрибутов * @param bool $is_format_spaces Форматировать пробелы и переносы строк? * Вид текста на выходе (plain) максимально приближеется виду текста в браузере на входе. * Другими словами, грамотно преобразует text/html в text/plain. * Текст форматируется только в том случае, если были вырезаны какие-либо таги. * @param array $pair_tags массив имён парных тагов, которые будут удалены вместе с содержимым * см. значения по умолчанию * @param array $para_tags массив имён парных тагов, которые будут восприниматься как параграфы (если $is_format_spaces = true) * см. значения по умолчанию * @return string */ include (BASE_DIR . '/lib/StripTagsSmart/strip_tags_smart.php'); /** * Вычисление разницы между двумя метками времени * * @param string $a начальная метка * @param string $b конечная метка * @return int время между метками */ if (!function_exists('microtime_diff')){ function microtime_diff($a, $b) { list($a_dec, $a_sec) = explode(' ', $a); list($b_dec, $b_sec) = explode(' ', $b); return $b_sec - $a_sec + $b_dec - $a_dec; } } /** * Функция меняет кодировку файла * * @param string $path * @param string $to */ if (!function_exists('file_encoding')){ function file_encoding($path, $to='utf') { $f = file_get_contents($path); $f = mb_convert_encoding($f,$to == 'utf' ? 'UTF-8' : 'CP1251', $to == 'utf' ? 'CP1251' : 'UTF-8'); file_put_contents($path, $f); } } /** * Replace array_combine() * * @category PHP * @package PHP_Compat * @license LGPL - http://www.gnu.org/licenses/lgpl.html * @copyright 2004-2007 Aidan Lister , Arpad Ray * @link http://php.net/function.array_combine * @author Aidan Lister * @version $Revision: 1.23 $ * @since PHP 5 * @require PHP 4.0.0 (user_error) */ function php_compat_array_combine($keys, $values) { if (!is_array($keys)) { user_error('array_combine() expects parameter 1 to be array, ' . gettype($keys) . ' given', E_USER_WARNING); return; } if (!is_array($values)) { user_error('array_combine() expects parameter 2 to be array, ' . gettype($values) . ' given', E_USER_WARNING); return; } $key_count = count($keys); $value_count = count($values); if ($key_count !== $value_count) { user_error('array_combine() Both parameters should have equal number of elements', E_USER_WARNING); return false; } if ($key_count === 0 || $value_count === 0) { user_error('array_combine() Both parameters should have number of elements at least 0', E_USER_WARNING); return false; } $keys = array_values($keys); $values = array_values($values); $combined = array(); for ($i = 0; $i < $key_count; $i++) { $combined[$keys[$i]] = $values[$i]; } return $combined; } // Define if (!function_exists('array_combine')) { function array_combine($keys, $values) { return php_compat_array_combine($keys, $values); } } /** * post() * * @param mixed $var * @return string */ if (!function_exists('post')){ function post($var) { return (isset($_POST[$var])) ? $_POST[$var] : ''; } } /** * get() * * @param mixed $var * @return string */ if (!function_exists('get')){ function get($var) { return (isset($_GET[$var])) ? $_GET[$var] : ''; } } /** * sanitize() * * @param mixed $string * @param bool $trim * @param bool $int * @param bool $str * @return mixed|string */ if (!function_exists('sanitize')){ function sanitize($string, $trim = false, $int = false, $str = false) { $string = filter_var($string, FILTER_SANITIZE_STRING); $string = trim($string); $string = stripslashes($string); $string = strip_tags($string); $string = str_replace( array( '‘', '’', '“', '”' ), array( "'", "'", '"', '"' ), $string ); if ($trim) $string = substr($string, 0, $trim); if ($int) $string = preg_replace("/[^0-9\s]/", "", $string); if ($str) $string = preg_replace("/[^a-zA-Z\s]/", "", $string); return $string; } } /** * cleanSanitize() * * @param mixed $string * @param bool $trim * @param string $end_char * @return mixed|string */ if (!function_exists('cleanSanitize')){ function cleanSanitize($string, $trim = false, $end_char = '…') { $string = cleanOut($string); $string = filter_var($string, FILTER_SANITIZE_STRING); $string = trim($string); $string = stripslashes($string); $string = strip_tags($string); $string = str_replace(array( '‘', '’', '“', '”'), array( "'", "'", '"', '"'), $string); if ($trim) { if (strlen($string) < $trim) { return $string; } $string = preg_replace("/\s+/", ' ', str_replace(array( "\r\n", "\r", "\n"), ' ', $string)); if (strlen($string) <= $trim) { return $string; } $out = ""; foreach (explode(' ', trim($string)) as $val) { $out .= $val . ' '; if (strlen($out) >= $trim) { $out = trim($out); return (strlen($out) == strlen($string)) ? $out : $out . $end_char; } } } return $string; } } /** * Функция обрезает текст до заданной величины * * @param mixed $string * @param int $length Длинна * @param string $etc Окончание * @param bool $break_words Дробить слова на символы * @param bool $middle Вырезает середину, оставляет начало + разделитель + конец * @return mixed|string */ if (! function_exists('trancate')) { function truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) { if ($length == 0) return ''; if (mb_strlen($string) > $length) { $length -= min($length, mb_strlen($etc)); if (! $break_words && ! $middle) { $string = preg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length + 1)); } if (! $middle) { return mb_substr($string, 0, $length) . $etc; } else { return mb_substr($string, 0, $length / 2) . $etc . mb_substr($string, - $length / 2); } } else { return $string; } } } /** * Функция обрезает текст до заданной величины, не бьет слова * * @param mixed $str * @param int $n Длинна * @param mixed $end_char Окончание * @return mixed|string */ if (!function_exists('truncate_text')) { function truncate_text($str, $n = 100, $end_char = '…') { if (strlen($str) < $n) { return $str; } $str = preg_replace("/\s+/", ' ', str_replace(array( "\r\n", "\r", "\n"), ' ', $str)); if (strlen($str) <= $n) { return $str; } $out = ""; foreach (explode(' ', trim($str)) as $val) { $out .= $val . ' '; if (strlen($out) >= $n) { $out = trim($out); return (strlen($out) == strlen($str)) ? $out : $out . $end_char; } } return $str; } } /** * Swap named HTML entities with numeric entities. * * @see http://www.lazycat.org/software/html_entity_decode_full.phps */ function convert_entity($matches, $destroy = true) { $table = array( 'Aacute' => 'Á', 'aacute' => 'á', 'Acirc' => 'Â', 'acirc' => 'â', 'acute' => '´', 'AElig' => 'Æ', 'aelig' => 'æ', 'Agrave' => 'À', 'agrave' => 'à', 'alefsym' => 'ℵ', 'Alpha' => 'Α', 'alpha' => 'α', 'amp' => '&', 'and' => '∧', 'ang' => '∠', 'Aring' => 'Å', 'aring' => 'å', 'asymp' => '≈', 'Atilde' => 'Ã', 'atilde' => 'ã', 'Auml' => 'Ä', 'auml' => 'ä', 'bdquo' => '„', 'Beta' => 'Β', 'beta' => 'β', 'brvbar' => '¦', 'bull' => '•', 'cap' => '∩', 'Ccedil' => 'Ç', 'ccedil' => 'ç', 'cedil' => '¸', 'cent' => '¢', 'Chi' => 'Χ', 'chi' => 'χ', 'circ' => 'ˆ', 'clubs' => '♣', 'cong' => '≅', 'copy' => '©', 'crarr' => '↵', 'cup' => '∪', 'curren' => '¤', 'dagger' => '†', 'Dagger' => '‡', 'darr' => '↓', 'dArr' => '⇓', 'deg' => '°', 'Delta' => 'Δ', 'delta' => 'δ', 'diams' => '♦', 'divide' => '÷', 'Eacute' => 'É', 'eacute' => 'é', 'Ecirc' => 'Ê', 'ecirc' => 'ê', 'Egrave' => 'È', 'egrave' => 'è', 'empty' => '∅', 'emsp' => ' ', 'ensp' => ' ', 'Epsilon' => 'Ε', 'epsilon' => 'ε', 'equiv' => '≡', 'Eta' => 'Η', 'eta' => 'η', 'ETH' => 'Ð', 'eth' => 'ð', 'Euml' => 'Ë', 'euml' => 'ë', 'euro' => '€', 'exist' => '∃', 'fnof' => 'ƒ', 'forall' => '∀', 'frac12' => '½', 'frac14' => '¼', 'frac34' => '¾', 'frasl' => '⁄', 'Gamma' => 'Γ', 'gamma' => 'γ', 'ge' => '≥', 'gt' => '>', 'harr' => '↔', 'hArr' => '⇔', 'hearts' => '♥', 'hellip' => '…', 'Iacute' => 'Í', 'iacute' => 'í', 'Icirc' => 'Î', 'icirc' => 'î', 'iexcl' => '¡', 'Igrave' => 'Ì', 'igrave' => 'ì', 'image' => 'ℑ', 'infin' => '∞', 'int' => '∫', 'Iota' => 'Ι', 'iota' => 'ι', 'iquest' => '¿', 'isin' => '∈', 'Iuml' => 'Ï', 'iuml' => 'ï', 'Kappa' => 'Κ', 'kappa' => 'κ', 'Lambda' => 'Λ', 'lambda' => 'λ', 'lang' => '〈', 'laquo' => '«', 'larr' => '←', 'lArr' => '⇐', 'lceil' => '⌈', 'ldquo' => '“', 'le' => '≤', 'lfloor' => '⌊', 'lowast' => '∗', 'loz' => '◊', 'lrm' => '‎', 'lsaquo' => '‹', 'lsquo' => '‘', 'lt' => '<', 'macr' => '¯', 'mdash' => '—', 'micro' => 'µ', 'middot' => '·', 'minus' => '−', 'Mu' => 'Μ', 'mu' => 'μ', 'nabla' => '∇', 'nbsp' => ' ', 'ndash' => '–', 'ne' => '≠', 'ni' => '∋', 'not' => '¬', 'notin' => '∉', 'nsub' => '⊄', 'Ntilde' => 'Ñ', 'ntilde' => 'ñ', 'Nu' => 'Ν', 'nu' => 'ν', 'Oacute' => 'Ó', 'oacute' => 'ó', 'Ocirc' => 'Ô', 'ocirc' => 'ô', 'OElig' => 'Œ', 'oelig' => 'œ', 'Ograve' => 'Ò', 'ograve' => 'ò', 'oline' => '‾', 'Omega' => 'Ω', 'omega' => 'ω', 'Omicron' => 'Ο', 'omicron' => 'ο', 'oplus' => '⊕', 'or' => '∨', 'ordf' => 'ª', 'ordm' => 'º', 'Oslash' => 'Ø', 'oslash' => 'ø', 'Otilde' => 'Õ', 'otilde' => 'õ', 'otimes' => '⊗', 'Ouml' => 'Ö', 'ouml' => 'ö', 'para' => '¶', 'part' => '∂', 'permil' => '‰', 'perp' => '⊥', 'Phi' => 'Φ', 'phi' => 'φ', 'Pi' => 'Π', 'pi' => 'π', 'piv' => 'ϖ', 'plusmn' => '±', 'pound' => '£', 'prime' => '′', 'Prime' => '″', 'prod' => '∏', 'prop' => '∝', 'Psi' => 'Ψ', 'psi' => 'ψ', 'quot' => '"', 'radic' => '√', 'rang' => '〉', 'raquo' => '»', 'rarr' => '→', 'rArr' => '⇒', 'rceil' => '⌉', 'rdquo' => '”', 'real' => 'ℜ', 'reg' => '®', 'rfloor' => '⌋', 'Rho' => 'Ρ', 'rho' => 'ρ', 'rlm' => '‏', 'rsaquo' => '›', 'rsquo' => '’', 'sbquo' => '‚', 'Scaron' => 'Š', 'scaron' => 'š', 'sdot' => '⋅', 'sect' => '§', 'shy' => '­', 'Sigma' => 'Σ', 'sigma' => 'σ', 'sigmaf' => 'ς', 'sim' => '∼', 'spades' => '♠', 'sub' => '⊂', 'sube' => '⊆', 'sum' => '∑', 'sup' => '⊃', 'sup1' => '¹', 'sup2' => '²', 'sup3' => '³', 'supe' => '⊇', 'szlig' => 'ß', 'Tau' => 'Τ', 'tau' => 'τ', 'there4' => '∴', 'Theta' => 'Θ', 'theta' => 'θ', 'thetasym' => 'ϑ', 'thinsp' => ' ', 'THORN' => 'Þ', 'thorn' => 'þ', 'tilde' => '˜', 'times' => '×', 'trade' => '™', 'Uacute' => 'Ú', 'uacute' => 'ú', 'uarr' => '↑', 'uArr' => '⇑', 'Ucirc' => 'Û', 'ucirc' => 'û', 'Ugrave' => 'Ù', 'ugrave' => 'ù', 'uml' => '¨', 'upsih' => 'ϒ', 'Upsilon' => 'Υ', 'upsilon' => 'υ', 'Uuml' => 'Ü', 'uuml' => 'ü', 'weierp' => '℘', 'Xi' => 'Ξ', 'xi' => 'ξ', 'Yacute' => 'Ý', 'yacute' => 'ý', 'yen' => '¥', 'Yuml' => 'Ÿ', 'yuml' => 'ÿ', 'Zeta' => 'Ζ', 'zeta' => 'ζ', 'zwj' => '‍', 'zwnj' => '‌' ); if (isset($table[$matches[1]])) return $table[$matches[1]]; else return $destroy ? '' : $matches[0]; } /** * stripTags() * * @param mixed $start * @param mixed $end * @param mixed $string * @return string */ if (!function_exists('stripTags')) { function stripTags($start, $end, $string) { $string = stristr($string, $start); $doend = stristr($string, $end); return substr($string, strlen($start), -strlen($doend)); } } /** * stripExt() * * @param mixed $filename * @return string */ if (!function_exists('stripExt')){ function stripExt($filename) { if (strpos($filename, ".") === false) { return ucwords($filename); } else return substr(ucwords($filename), 0, strrpos($filename, ".")); } } /** * Очиста текста * * @param mixed $text * @return string */ if (!function_exists('cleanOut')){ function cleanOut($text) { $text = strtr($text, array( '\r\n' => "", '\r' => "", '\n' => "")); $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8'); $text = str_replace('
', '
', $text); return stripslashes($text); } } /** * Сравнение двух чисел * * @param mixed $float1 * @param mixed $float2 * @param string $operator * @return bool */ if (!function_exists('compareFloatNumbers')){ function compareFloatNumbers($float1, $float2, $operator='=') { // Check numbers to 5 digits of precision $epsilon = 0.00001; $float1 = (float)$float1; $float2 = (float)$float2; switch ($operator) { // equal case "=": case "eq": if (abs($float1 - $float2) < $epsilon) { return true; } break; // less than case "<": case "lt": if (abs($float1 - $float2) < $epsilon) { return false; } else { if ($float1 < $float2) { return true; } } break; // less than or equal case "<=": case "lte": if (compareFloatNumbers($float1, $float2, '<') || compareFloatNumbers($float1, $float2, '=')) { return true; } break; // greater than case ">": case "gt": if (abs($float1 - $float2) < $epsilon) { return false; } else { if ($float1 > $float2) { return true; } } break; // greater than or equal case ">=": case "gte": if (compareFloatNumbers($float1, $float2, '>') || compareFloatNumbers($float1, $float2, '=')) { return true; } break; case "<>": case "!=": case "ne": if (abs($float1 - $float2) > $epsilon) { return true; } break; default: die("Unknown operator '".$operator."' in compareFloatNumbers()"); } return false; } } /** * Поиск значения по массиву * * @param $array * @param $key * @param bool $value * @return bool */ if (!function_exists('searchforValue')){ function searchforValue($array, $key, $value) { if($array) { foreach ($array as $val) { if ($val->$key == $value) { return true; } } } return false; } } /** * Поиск в массиве * * @param mixed $array * @param mixed $val1 * @param mixed $val2 * @return array|int */ if (!function_exists('findInArray')){ function findInArray($array, $val1, $val2) { if($array) { $result = array(); foreach ($array as $val) { if ($val->$val1 == $val2) { $result[] = $val; } } return ($result) ? $result : 0; } return 0; } } /** * Скачать файл * * @param $fileLocation * @param $fileName * @param int $maxSpeed * @return bool */ if (!function_exists('downloadFile')){ function downloadFile($fileLocation, $fileName, $maxSpeed = 5120) { if (connection_status() != 0) return (false); $extension = strtolower(substr($fileName, strrpos($fileName, '.') + 1)); /* List of File Types */ $fileTypes['swf'] = 'application/x-shockwave-flash'; $fileTypes['pdf'] = 'application/pdf'; $fileTypes['exe'] = 'application/octet-stream'; $fileTypes['zip'] = 'application/zip'; $fileTypes['doc'] = 'application/msword'; $fileTypes['xls'] = 'application/vnd.ms-excel'; $fileTypes['ppt'] = 'application/vnd.ms-powerpoint'; $fileTypes['gif'] = 'image/gif'; $fileTypes['png'] = 'image/png'; $fileTypes['jpeg'] = 'image/jpg'; $fileTypes['jpg'] = 'image/jpg'; $fileTypes['rar'] = 'application/rar'; $fileTypes['ra'] = 'audio/x-pn-realaudio'; $fileTypes['ram'] = 'audio/x-pn-realaudio'; $fileTypes['ogg'] = 'audio/x-pn-realaudio'; $fileTypes['wav'] = 'video/x-msvideo'; $fileTypes['wmv'] = 'video/x-msvideo'; $fileTypes['avi'] = 'video/x-msvideo'; $fileTypes['asf'] = 'video/x-msvideo'; $fileTypes['divx'] = 'video/x-msvideo'; $fileTypes['mp3'] = 'audio/mpeg'; $fileTypes['mp4'] = 'audio/mpeg'; $fileTypes['mpeg'] = 'video/mpeg'; $fileTypes['mpg'] = 'video/mpeg'; $fileTypes['mpe'] = 'video/mpeg'; $fileTypes['mov'] = 'video/quicktime'; $fileTypes['swf'] = 'video/quicktime'; $fileTypes['3gp'] = 'video/quicktime'; $fileTypes['m4a'] = 'video/quicktime'; $fileTypes['aac'] = 'video/quicktime'; $fileTypes['m3u'] = 'video/quicktime'; $contentType = $fileTypes[$extension]; header("Cache-Control: public"); header("Content-Transfer-Encoding: binary\n"); header('Content-Type: $contentType'); $contentDisposition = 'attachment'; if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { $fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1); header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); } else { header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); } header("Accept-Ranges: bytes"); $range = 0; $size = filesize($fileLocation); if (isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']); str_replace($range, "-", $range); $size2 = $size - 1; $new_length = $size - $range; header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length"); header("Content-Range: bytes $range$size2/$size"); } else { $size2 = $size - 1; header("Content-Range: bytes 0-$size2/$size"); header("Content-Length: " . $size); } if ($size == 0) { die('Zero byte file! Aborting download'); } $fp = fopen("$fileLocation", "rb"); fseek($fp, $range); while (!feof($fp) and (connection_status() == 0)) { set_time_limit(0); print (fread($fp, 1024 * $maxSpeed)); flush(); ob_flush(); sleep(1); } fclose($fp); exit; return ((connection_status() == 0) and !connection_aborted()); } } /** * Конвертируем hex color в decimal color * @param string $hexcolor Значение цвета в HEX. Example: #A9B7D3 * @return array|bool */ if (!function_exists('color_h2d')){ function color_h2d($hexcolor) { if(mb_strlen($hexcolor) != 7 || mb_strpos($hexcolor, "#") === false) { return false; } return array( "r" => hexdec(mb_substr($hexcolor, 1, 2)), "g" => hexdec(mb_substr($hexcolor, 3, 2)), "b" => hexdec(mb_substr($hexcolor, 5, 2))); } } ?>