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)
*
* @param $keys
* @param $values
*
* @return array|bool
*/
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 false;
}
if (! is_array($values))
{
user_error('array_combine() expects parameter 2 to be array, ' . gettype($values) . ' given', E_USER_WARNING);
return false;
}
$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
*
* @param $matches
* @param bool $destroy
*
* @return mixed|string
*/
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)));
}
}
?>