//Текушая реальная директория
function getRealDir(){
return $curRealDir = substr($_SERVER["REAL_FILE_PATH"], 0, strrpos($_SERVER["REAL_FILE_PATH"], "/")+1);
}
function isValidPhone($phone) {
return preg_match("/^(?:\+?[7,8][-. ]?)?\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{2})[-. ]?([0-9]{2})$/", $phone);
}
function CheckPhone($phone){
if (strlen(($phone) > 0)
{
$phone = str_replace(" ", "", $phone);
$phone = str_replace("(", "", $phone);
$phone = str_replace(")", "", $phone);
$phone = str_replace("-", "", $phone);
$phone = str_replace("_", "", $phone);
$phone = str_replace("+7", "", $phone);
if (strlen($phone) == 10)
{
return true;
}else return false
}
}
function isAjax() {
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
}
function getNumEnding($number, $endingArray)
{
$number = $number % 100;
if ($number>=11 && $number<=19) {
$ending=$endingArray[2];
}
else {
$i = $number % 10;
switch ($i)
{
case (1): $ending = $endingArray[0]; break;
case (2):
case (3):
case (4): $ending = $endingArray[1]; break;
default: $ending=$endingArray[2];
}
}
return $ending;
}
function rus_date() {
// Перевод
$translate = array(
"am" => "дп",
"pm" => "пп",
"AM" => "ДП",
"PM" => "ПП",
"Monday" => "Понедельник",
"Mon" => "Пн",
"Tuesday" => "Вторник",
"Tue" => "Вт",
"Wednesday" => "Среда",
"Wed" => "Ср",
"Thursday" => "Четверг",
"Thu" => "Чт",
"Friday" => "Пятница",
"Fri" => "Пт",
"Saturday" => "Суббота",
"Sat" => "Сб",
"Sunday" => "Воскресенье",
"Sun" => "Вс",
"January" => "Января",
"Jan" => "Янв",
"February" => "Февраля",
"Feb" => "Фев",
"March" => "Марта",
"Mar" => "Мар",
"April" => "Апреля",
"Apr" => "Апр",
"May" => "Мая",
"May" => "Мая",
"June" => "Июня",
"Jun" => "Июн",
"July" => "Июля",
"Jul" => "Июл",
"August" => "Августа",
"Aug" => "Авг",
"September" => "Сентября",
"Sep" => "Сен",
"October" => "Октября",
"Oct" => "Окт",
"November" => "Ноября",
"Nov" => "Ноя",
"December" => "Декабря",
"Dec" => "Дек",
"st" => "ое",
"nd" => "ое",
"rd" => "е",
"th" => "ое"
);
// если передали дату, то переводим ее
if (func_num_args() > 1) {
$timestamp = func_get_arg(1);
return strtr(date(func_get_arg(0), $timestamp), $translate);
} else {
// иначе текущую дату
return strtr(date(func_get_arg(0)), $translate);
}
}
// Загружает файлы, вернет массив, имена и реальный путь файлов
function Upload_Files($uploaddir, $filename){
foreach($_FILES[$filename]['error'] as $k=>$v)
{
$uploadfile = $uploaddir. basename($_FILES['FILES']['name'][$k]);
if(move_uploaded_file($_FILES[$filename]['tmp_name'][$k], $uploadfile))
{
$arFiles[]= $_FILES[$filename]['name'][$k];
}
}
return $arFiles;
}
function Create_Archive($tmpdir, $uploaddir, $arFiles, $outfilename){
if(extension_loaded('zip')){
$zip = new ZipArchive();
$zip_name = $uploaddir.$outfilename.".zip";
$zip->open($zip_name, ZIPARCHIVE::CREATE);
if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){
$result['errors'] = "Error, ZIP creation failed at this time\n";
}
foreach($arFiles as $file){
$zip->addFile($tmpdir.$file, $file);
}
$zip->close();
if(file_exists($zip_name)){
return $zip_name;
}
}else echo "You dont have ZIP extension";
}
function grd($name, $type = 'str') { // -- данные из REQUEST --
global $_REQUEST;
if (!isset($_REQUEST[$name])) return null;
$result = null;
if (is_array($_REQUEST[$name])) $result = grd_array($_REQUEST[$name], $type);
else {
$result = strip_tags(trim($_REQUEST[$name]));
if ($type == 'str') $result = addslashes($result);
elseif ($type == 'int') $result = intval($result);
}
return $result;
}
function gcd($name, $type = 'str', $json_decode = false) { // -- данные из COOKIE --
global $_COOKIE;
$data = $json_decode ? json_decode($_COOKIE[$name]) : $_COOKIE[$name];
if (!isset($data)) return null;
if (is_array($data)) $result = grd_array($data, $type);
else if (is_object($data)) $result = grd_object($data, $type);
else {
$result = strip_tags(trim($data));
if ($type == 'str') $result = addslashes($result);
elseif ($type == 'int') $result = intval($result);
}
return $result;
}
function cleanInput($input) {
$search = array(
'@<script[^>]*?>.*?</script>@si', // Удаляем javascript
'@<;[\/\!]*?[^<>]*?>@si', // Удаляем HTML теги
'@<style[^>]*?>.*?</style>@siU', // Удаляем теги style
'@@' // Удаляем многострочные комментарии
);
$output = preg_replace($search, '', $input);
return $output;
}
function sanitize($input) {
if (is_array($input)) {
foreach($input as $var=>$val) {
$output[$var] = sanitize($val);
}
}
else {
if (get_magic_quotes_gpc()) {
$input = stripslashes($input);
}
$input = cleanInput($input);
$output = mysql_real_escape_string($input);
}
return $output;
}
function grd_array($var, $type) {
foreach ($var as $k => $v) {
if (is_array($v)) $result[$k] = grd_array($v, $type);
else if (is_object($v)) $result[$k] = grd_object($v, $type);
else {
$result[$k] = strip_tags(trim($v));
if ($type == 'str') @$result[$k] = addslashes($v);
elseif ($type == 'int') @$result[$k] = intval($v);
}
}
return $result;
}
function grd_object($var, $type) {
foreach (get_object_vars($var) as $k => $v) {
if (is_array($v)) $var->$k = grd_array($v, $type);
else if (is_object($v)) $var->$k = grd_object($v, $type);
else {
$var->$k = strip_tags(trim($v));
if ($type == 'str') @$var->$k = addslashes($v);
elseif ($type == 'int') @$var->$k = intval($v);
}
}
return $var;
}
function right_date_format($datestr, $to_mysql = false, $return_delimeter = null) {
if (!$datestr) return null;
if (is_int($datestr)) $datestr = date('Y-m-d', $datestr);
$delimeter = $to_mysql ? '-' : '.';
$date = explode(($to_mysql ? '.' : '-'), $datestr);
if ($return_delimeter) $delimeter = $return_delimeter;
return $date[2].$delimeter.$date[1].$delimeter.$date[0];
}
function right_date($datestr, $time = null, $m_upper = false) {
if (!$datestr) return null;
if ($m_upper) $monthes = array('Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря');
else $monthes = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
if (is_string($datestr)) {
if (mb_strlen($datestr) > 10) {
if ($time) $time = mb_substr($datestr, 11);
else $datestr = mb_substr($datestr, 0, 10);
}
$date = explode('-', $datestr);
} else {
$date_string = date('Y-m-d H:i', $datestr);
if ($time) $time = mb_substr($date_string, 11);
else $date_string = mb_substr($date_string, 0, 10);
$date = explode('-', $date_string);
}
return $date[2].' '.$monthes[intval($date[1])-1].' '.$date[0].($time ? ' '.$time : null);
}
function format_date($date, $time = null, $type = null) { // -- форматирует дату --
$out_date = $out_time = null;
if (strstr($date,':')) $out_time = ' '.substr($date, 11, 10);
if ((int)substr($date, 8, 2)) $out_date .= substr($date,8,2).".";
if ((int)substr($date, 5, 2)) $out_date .= substr($date,5,2).".";
if ((int)substr($date, 0, 4)) $out_date .= substr($date,0,4);
if ($type) {
$out_date .= " ".substr($date, 11, 2).":";
$out_date .= "".substr($date, 14, 2);
}
return $out_date.($time ? $out_time : '');
}
function timeformat($time=NULL)
{
$labelTime = date('d.m.Y', $time);
$arrM = array(
'01'=>'янв', '02'=>'фев', '03'=>'мар', '04'=>'апр',
'05'=>'май', '06'=>'июн', '07'=>'июл', '08'=>'авг',
'09'=>'сен', '10'=>'окт', '11'=>'ноя', '12'=>'дек'
);
if ($labelTime == date('d.m.Y')) {
return 'Сегодня в '.date('H:i', $time);
} elseif ($labelTime == (date('d') - 1).'.'.date('m.Y')) {
return 'Вчера в '.date('H:i', $time);
} else {
return date('d', $time).' '.$arrM[date('m', $time)].' '.date('Y', $time).' в '.date('H:i', $time);
}
}
function create_slug($string){
$string = strtolower($string);
$slug=preg_replace('/[^a-z0-9-]+/', '-', $string);
return $slug;
}
function generate_password($length = 20){
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789``-=~!@#$%^&*()_+,./<>?;:[]{}\|';
$max = mb_strlen($chars) - 1;
for ($i = 0; $i < $length; $i++) $str .= $chars[rand(0, $max)];
return $str;
}
// Сохранение контента в файл
function Save_File($file, $content)
{
return (file_put_contents($file, stripslashes($content)));
}
//Дата по русски
//echo rusdate(time(), '%dayweek%, j %month% Y, G:i');
function rusdate($d, $format = 'j %month% Y', $offset = 0){
$montharray = array('Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря');
$dayarray=array('Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье');
$d += 3600*$offset;
$sarray = array('/%month%/i', '/%dayweek%/i');
$rarray = array($montharray[date("m", $d)-1], $dayarray[date("N", $d)-1]);
$format = preg_replace($sarray, $rarray, $format);
return date($format, $d);
}
//Получаем реальный IP
function GetRealIP() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) $ip = $_SERVER['HTTP_CLIENT_IP'];
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
else $ip = $_SERVER['REMOTE_ADDR'];
return $ip;
}
//Определения города в PHP
function detect_city($ip) {
$default = 'UNKNOWN';
if (!is_string($ip) || strlen($ip) < 1 || $ip == '127.0.0.1' || $ip == 'localhost')
$ip = '8.8.8.8';
$curlopt_useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)';
$url = 'http://ipinfodb.com/ip_locator.php?ip=' . urlencode($ip);
$ch = curl_init();
$curl_opt = array(
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_USERAGENT => $curlopt_useragent,
CURLOPT_URL => $url,
CURLOPT_TIMEOUT => 1,
CURLOPT_REFERER => 'http://' . $_SERVER['HTTP_HOST'],
);
curl_setopt_array($ch, $curl_opt);
$content = curl_exec($ch);
if (!is_null($curl_info)) {
$curl_info = curl_getinfo($ch);
}
curl_close($ch);
if ( preg_match('{<br>City : ([^<]*)<br>}i', $content, $regs) ) {
$city = $regs[1];
}
if ( preg_match('{<br>State/Province : ([^<]*)<br>}i', $content, $regs) ) {
$state = $regs[1];
}
if( $city!='' && $state!='' ){
$location = $city . ', ' . $state;
return $location;
}else{
return $default;
}
}
//Whois на PHP
function whois_query($domain) {
// исправляем доменное имя:
$domain = strtolower(trim($domain));
$domain = preg_replace('/^http:\/\//i', '', $domain);
$domain = preg_replace('/^www\./i', '', $domain);
$domain = explode('/', $domain);
$domain = trim($domain[0]);
$_domain = explode('.', $domain);
$lst = count($_domain)-1;
$ext = $_domain[$lst];
$servers = array(
"biz" => "whois.neulevel.biz",
"com" => "whois.internic.net",
"us" => "whois.nic.us",
"coop" => "whois.nic.coop",
"info" => "whois.nic.info",
"name" => "whois.nic.name",
"net" => "whois.internic.net",
"gov" => "whois.nic.gov",
"edu" => "whois.internic.net",
"mil" => "rs.internic.net",
"int" => "whois.iana.org",
"ac" => "whois.nic.ac",
"ae" => "whois.uaenic.ae",
"at" => "whois.ripe.net",
"au" => "whois.aunic.net",
"be" => "whois.dns.be",
"bg" => "whois.ripe.net",
"br" => "whois.registro.br",
"bz" => "whois.belizenic.bz",
"ca" => "whois.cira.ca",
"cc" => "whois.nic.cc",
"ch" => "whois.nic.ch",
"cl" => "whois.nic.cl",
"cn" => "whois.cnnic.net.cn",
"cz" => "whois.nic.cz",
"de" => "whois.nic.de",
"fr" => "whois.nic.fr",
"hu" => "whois.nic.hu",
"ie" => "whois.domainregistry.ie",
"il" => "whois.isoc.org.il",
"in" => "whois.ncst.ernet.in",
"ir" => "whois.nic.ir",
"mc" => "whois.ripe.net",
"to" => "whois.tonic.to",
"tv" => "whois.tv",
"ru" => "whois.ripn.net",
"org" => "whois.pir.org",
"aero" => "whois.information.aero",
"nl" => "whois.domain-registry.nl"
);
if (!isset($servers[$ext])){
die('Error: No matching nic server found!');
}
$nic_server = $servers[$ext];
$output = '';
if ($conn = fsockopen ($nic_server, 43)) {
fputs($conn, $domain."\r\n");
while(!feof($conn)) {
$output .= fgets($conn,128);
}
fclose($conn);
}
else { die('Error: Could not connect to ' . $nic_server . '!'); }
return $output;
}
//Получаем файл
function Get_File($file)
{
return file_get_contents($file);
}
//Сохраняем файл
function Save_File($file, $content)
{
return (file_put_contents($file, stripslashes($content)));
}
function strtoSafe(){
$result = stripslashes($result); // удаляем слэши
$result = str_replace('#39;', '', $result); // удаляем одинарные кавычки
$result = str_replace('"', '', $result); // удаляем двойные кавычки
$result = str_replace('&', '', $result); // удаляем амперсанд
$result = preg_replace('/([?!:^~|@№$–=+*&%.,;\[\]<>()_—«»#\/]+)/', '', $result); // удаляем недоспустимые символы
$result = trim($result); // удаляем пробелы по бокам
$result = preg_replace('/ +/', '-', $result); // пробелы заменяем на минусы
$result = preg_replace('/-+/', '-', $result); // удаляем лишние минусы
$result = preg_replace('/([-]*)(.+)([-]*)/', '\\2', $result); // удаляем лишние минусы
}
//Проверка Email на правильность на PHP
function emailValid($string){
if (preg_match ("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+\.[A-Za-z]{2,6}$/", $string))
return true;
}
//Обрезаем текст правильно
function cropStr($str, $size){
return mb_substr($str,0,mb_strrpos(mb_substr($str,0,$size,'utf-8'),' ',utf-8),'utf-8');
}
function getUserIp() {
if ( isset($_SERVER['HTTP_X_REAL_IP']) )
{
$ip = $_SERVER['HTTP_X_REAL_IP'];
} else $ip = $_SERVER['REMOTE_ADDR'];
return $ip;
}
function getWord($number, $suffix) {
$keys = array(2, 0, 1, 1, 1, 2);
$modern = $number%100;
$suffix_key = ($modern > 7 && $modern < 20) ?2:
$keys[min($modern%10, 5)];
return $suffix[$suffix_key];
}
$arraymin = array("минута", "минуты", "минут");
//создали массив для минут
$arrayhour = array("час", "часа", "часов");
//создали массив для часов
$datemin = date('i');
$datehour = date('H');
//создали переменное время: часы и минуты раздельно, для удобства
$hour = getWord($datehour, $arrayhour);
$min = getWord($datemin, $arraymin);
//ну и, собственно, сам вывод
echo "".$datehour." ".$hour." ".$datemin." ".$min."";
//в результате получаем: 14 часов 16 минут
//Нормализуем и делаем текст безопасным для вставки в базу
function ProcessText($text)
{
$text = trim($text); // удаляем пробелы по бокам
$text = stripslashes($text); // удаляем слэши
$text = htmlspecialchars($text); // переводим HTML в текст
$text = preg_replace("/ +/", " ", $text); // множественные пробелы заменяем на одинарные
$text = preg_replace("/(\r\n){3,}/", "\r\n\r\n", $text); // убираем лишние переводы строк (больше 1 строки)
$test = nl2br ($text); // заменяем переводы строк на тег
$text = preg_replace("/^\"([^\"]+[^=><])\"/u", "$1«$2»", $text); // ставим людские кавычки
$text = preg_replace("/(«){2,}/","«",$text); // убираем лишние левые кавычки (больше 1 кавычки)
$text = preg_replace("/(»){2,}/","»",$text); // убираем лишние правые кавычки (больше 1 кавычки)
$text = preg_replace("/(\r\n){2,}/u", "<br><br>", $text); // ставим абзацы
return $text; //возвращаем переменную
}
function GetBasePath() {
return substr($_SERVER['SCRIPT_FILENAME'], 0, strlen($_SERVER['SCRIPT_FILENAME']) - strlen(strrchr($_SERVER['SCRIPT_FILENAME'], "\\")));
}
function GetURI(){
$this_page = basename($_SERVER['REQUEST_URI']);
if (strpos($this_page, "?") !== false) $this_page = reset(explode("?", $this_page));
return $this_page;
}
//Удаляем лишние из входных данных
function clearspecchars($str){
$str = str_replace(',','',$str);
$str = str_replace('\'','',$str);
$str = str_replace('\\','',$str);
$str = str_replace('/','',$str);
$str = stripslashes(trim($str));
$str = htmlspecialchars($str);
return $str;
}
//Проверка номера телефона на PHP
function check_phone(){
preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x",
"Call 555-1212 or 1-800-555-1212", $phones);
}
//Проверка номера телефона на PHP
function checkPhone($number)
{
if(preg_match('^[0-9]{3}+-[0-9]{3}+-[0-9]{4}^', $number)){
return $number;
} else {
$items = Array('/\ /', '/\+/', '/\-/', '/\./', '/\,/', '/\(/', '/\)/', '/[a-zA-Z]/');
$clean = preg_replace($items, '', $number);
return substr($clean, 0, 3).'-'.substr($clean, 3, 3).'-'.substr($clean, 6, 4);
}
}
//Делаем текст безопасным для вставки в базу новости, статьи и т. д.
function filter_secure_text($text){
// Фильтрация опасных слов
if (!preg_match("/script|http|<|>|<|>|SELECT|UNION|UPDATE|exe|exec|INSERT|tmp/i",$text))
{
die("ne dopustimie slova");
}
}
function check_host_ip(){
$ip = "yandex.ru";
if(preg_match('/(\d+).(\d+).(\d+).(\d+)/',$ip))
$host = gethostbyaddr($ip);
else
$host = gethostbyname($ip);
echo $host;
}
function link_clikabel(){
$stringa = " bla bla bla http://www.example.com bla bla http://www.example.net bla bla bla";
$m = preg_match_all('/http:\/\/[a-z0-9A-Z.]+(?(?=[\/])(.*))/', $stringa, $match);
if ($m) {
$links=$match[0];
for ($j=0;$j<$m;$j++) {
$stringa=str_replace($links[$j],''.$links[$j].'',$stringa);
}
}
}
//Проверка электронного адреса на PHP
function check_mail($email){
$email = "phil.taylor@a_domain.tv";
if (preg_match("/^[^@]*@[^@]*\.[^@]*$/", $email)) {
return "E-mail address";
}
}
//Проверка электронного адреса на PHP
function valid_email($email){
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "E-mail is not valid";
} else {
echo "E-mail is valid";
}
}
function check_abcnum($text){
// Проверяем все символы на буквы и цифры
/// /[^(\w)|(\x7F-\xFF-)|(\s)]/ английские , русские буквы и цифры
if( !( preg_match("/^([a-z0-9]*)$/i", $text) ) )
{
die("veli nepravilnie simvloi");
}
}
function isfile($file){
return preg_match('/^[^.^:^?^\-][^:^?]*\.(?i)' . getexts() . '$/',$file);
//first character cannot be . : ? - subsequent characters can't be a : ?
//then a . character and must end with one of your extentions
//getexts() can be replaced with your extentions pattern
}
function getexts(){
//list acceptable file extensions here
return '(app|avi|doc|docx|exe|ico|mid|midi|mov|mp3|
mpg|mpeg|pdf|psd|qt|ra|ram|rm|rtf|txt|wav|word|xls)';
}
//Проверка правильность IP адреса
function valid_ip($ip) {
return preg_match("/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" .
"(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/", $ip);
}
function fixtags($text){
$text = htmlspecialchars($text);
$text = preg_replace("/=/", "=\"\"", $text);
$text = preg_replace("/"/", ""\"", $text);
$tags = "/<(\/|)(\w*)(\ |)(\w*)([\\\=]*)(?|(\")\""\"|)(?|(.*)?"(\")|)([\ ]?)(\/|)>/i";
$replacement = "<$1$2$3$4$5$6$7$8$9$10>";
$text = preg_replace($tags, $replacement, $text);
$text = preg_replace("/=\"\"/", "=", $text);
return $text;
}
//Очищаем входные данные
function clean_chars($string)
{
// Remove all remaining other unknown characters
$string = preg_replace('/[^a-zA-Z0-9\-]/', ' ', $string);
$string = preg_replace('/^[\-]+/', '', $string);
$string = preg_replace('/[\-]+$/', '', $string);
$string = preg_replace('/[\-]{2,}/', ' ', $string);
return $string;
}
//Транслитерация с Латинского на Русский
function translitrus($string) {
$converter = array(
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => "'", 'ы' => 'y', 'ъ' => "'", 'э' => 'e', 'ю' => 'yu', 'я' => 'ya',
'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', 'Ь' => "'", 'Ы' => 'Y', 'Ъ' => "'", 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya'
);
return strtr($string, $converter);
}
//Транслитерация с Латинского на Русский
function translitToRus($string){
$table = array(
'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'YO', 'Ж' => 'ZH',
'З' => 'Z', 'И' => 'I', 'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O',
'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C',
'Ч' => 'CH', 'Ш' => 'SH', 'Щ' => 'CSH', 'Ь' => '', 'Ы' => 'Y', 'Ъ' => '', 'Э' => 'E', 'Ю' => 'YU',
'Я' => 'YA', 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo',
'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n',
'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h',
'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'csh', 'ь' => '', 'ы' => 'y', 'ъ' => '', 'э' => 'e',
'ю' => 'yu', 'я' => 'ya',
);
$output = str_replace(array_keys($table), array_values($table), $string);
return $output;
}
//Делаем HTML безопасным для вставки в базу
function htmlspecialcharsEx($str)
{
static $search = array("&", "<", ">", """, """, """, "'", "'", "<", ">", "\"");
static $replace = array("&amp;", "&lt;", "&gt;", "&quot;", "&#34", "&#x22", "&#39", "&#x27", "<", ">", """);
return str_replace($search, $replace, $str);
}
//Переобразуем HTML Обратно
function htmlspecialcharsback($str)
{
static $search = array("<", ">", """, "'", "&");
static $replace = array("<", ">", "\"", "'", "&");
return str_replace($search, $replace, $str);
}
//Удаление файлов на PHP
function DeleteDirFilesEx($path)
{
if(strlen($path) == 0 || $path == '/')
return false;
$full_path = $_SERVER["DOCUMENT_ROOT"]."/".$path;
$full_path = preg_replace("#[\\\\\\/]+#", "/", $full_path);
$f = true;
if(is_file($full_path) || is_link($full_path))
{
if(@unlink($full_path))
return true;
return false;
}
elseif(is_dir($full_path))
{
if($handle = opendir($full_path))
{
while(($file = readdir($handle)) !== false)
{
if($file == "." || $file == "..")
continue;
if(!DeleteDirFilesEx($path."/".$file))
$f = false;
}
closedir($handle);
}
if(!@rmdir($full_path))
return false;
return $f;
}
return false;
}
//Удаление файлов на PHP
function DeleteDirFiles($frDir, $toDir, $arExept = array())
{
if(is_dir($frDir))
{
$d = dir($frDir);
while ($entry = $d->read())
{
if ($entry=="." || $entry=="..")
continue;
if (in_array($entry, $arExept))
continue;
@unlink($toDir."/".$entry);
}
$d->close();
}
}
//Получение тип файла на PHP
function GetFileType($path)
{
$extension = GetFileExtension(strtolower($path));
switch ($extension)
{
case "jpg": case "jpeg": case "gif": case "bmp": case "png":
$type = "IMAGE";
break;
case "swf":
$type = "FLASH";
break;
case "html": case "htm": case "asp": case "aspx":
case "phtml": case "php": case "php3": case "php4": case "php5": case "php6":
case "shtml": case "sql": case "txt": case "inc": case "js": case "vbs":
case "tpl": case "css": case "shtm":
$type = "SOURCE";
break;
default:
$type = "UNKNOWN";
}
return $type;
}
function GetDirectoryIndex($path, $strDirIndex=false)
{
return GetDirIndex($path, $strDirIndex);
}
function GetDirPath($sPath)
{
if(strlen($sPath))
{
$p = strrpos($sPath, "/");
if($p === false)
return '/';
else
return substr($sPath, 0, $p+1);
}
else
{
return '/';
}
}
function NormalizePhone($number, $minLength = 10)
{
$minLength = intval($minLength);
if ($minLength <= 0 || strlen($number) < $minLength)
{
return false;
}
if (strlen($number) >= 10 && substr($number, 0, 2) == '+8')
{
$number = '00'.substr($number, 1);
}
$number = preg_replace("/[^0-9\#\*]/i", "", $number);
if (strlen($number) >= 10)
{
if (substr($number, 0, 2) == '80' || substr($number, 0, 2) == '81' || substr($number, 0, 2) == '82')
{
}
else if (substr($number, 0, 2) == '00')
{
$number = substr($number, 2);
}
else if (substr($number, 0, 3) == '011')
{
$number = substr($number, 3);
}
else if (substr($number, 0, 1) == '8')
{
$number = '7'.substr($number, 1);
}
else if (substr($number, 0, 1) == '0')
{
$number = substr($number, 1);
}
}
return $number;
}
function InputType($strType, $strName, $strValue, $strCmp, $strPrintValue=false, $strPrint="", $field1="", $strId="")
{
$bCheck = false;
if($strValue <> '')
{
if(is_array($strCmp))
$bCheck = in_array($strValue, $strCmp);
elseif($strCmp <> '')
$bCheck = in_array($strValue, explode(",", $strCmp));
}
$bLabel = false;
if ($strType == 'radio')
$bLabel = true;
return ($bLabel? '<label>': '').'<input type="'.$strType.'" name="'.$strName.'" id="'.($strId <> ''? $strId : $strName).'" value="'.$strValue.'">'.($strPrintValue? $strValue:$strPrint).($bLabel? '</label>': '');
}
function TruncateText($strText, $intLen)
{
if(strlen($strText) > $intLen)
return rtrim(substr($strText, 0, $intLen), ".")."...";
else
return $strText;
}
function extract_url($s)
{
$s2 = '';
while(strpos(",}])>.", substr($s, -1, 1))!==false)
{
$s2 = substr($s, -1, 1);
$s = substr($s, 0, strlen($s)-1);
}
$res = chr(1).$s."/".chr(1).$s2;
return $res;
}
function DeleteDirFilesEx($path)
{
if(strlen($path) == 0 || $path == '/')
return false;
$full_path = $_SERVER["DOCUMENT_ROOT"]."/".$path;
$full_path = preg_replace("#[\\\\\\/]+#", "/", $full_path);
$f = true;
if(is_file($full_path) || is_link($full_path))
{
if(@unlink($full_path))
return true;
return false;
}
elseif(is_dir($full_path))
{
if($handle = opendir($full_path))
{
while(($file = readdir($handle)) !== false)
{
if($file == "." || $file == "..")
continue;
if(!DeleteDirFilesEx($path."/".$file))
$f = false;
}
closedir($handle);
}
if(!@rmdir($full_path))
return false;
return $f;
}
return false;
}
function DeleteDirFiles($frDir, $toDir, $arExept = array())
{
if(is_dir($frDir))
{
$d = dir($frDir);
while ($entry = $d->read())
{
if ($entry=="." || $entry=="..")
continue;
if (in_array($entry, $arExept))
continue;
@unlink($toDir."/".$entry);
}
$d->close();
}
}
function GetFileName($path)
{
$path = TrimUnsafe($path);
$path = str_replace("\\", "/", $path);
$path = rtrim($path, "/");
$p = bxstrrpos($path, "/");
if($p !== false)
return substr($path, $p+1);
return $path;
}
function GetDirectoryIndex($path, $strDirIndex=false)
{
return GetDirIndex($path, $strDirIndex);
}
function GetDirPath($sPath)
{
if(strlen($sPath))
{
$p = strrpos($sPath, "/");
if($p === false)
return '/';
else
return substr($sPath, 0, $p+1);
}
else
{
return '/';
}
}
//Парсим URL
function ParseURL($url, $arUrlOld = false)
{
$arUrl = parse_url($url);
if (is_array($arUrlOld))
{
if (!array_key_exists('scheme', $arUrl))
{
$arUrl['scheme'] = $arUrlOld['scheme'];
}
if (!array_key_exists('host', $arUrl))
{
$arUrl['host'] = $arUrlOld['host'];
}
if (!array_key_exists('port', $arUrl))
{
$arUrl['port'] = $arUrlOld['port'];
}
}
$arUrl['proto'] = '';
if (array_key_exists('scheme', $arUrl))
{
$arUrl['scheme'] = strtolower($arUrl['scheme']);
}
else
{
$arUrl['scheme'] = 'http';
}
if (!array_key_exists('port', $arUrl))
{
if ($arUrl['scheme'] == 'https')
{
$arUrl['port'] = 443;
}
else
{
$arUrl['port'] = 80;
}
}
if ($arUrl['scheme'] == 'https')
{
$arUrl['proto'] = 'ssl://';
}
$arUrl['path_query'] = array_key_exists('path', $arUrl) ? $arUrl['path'] : '/';
if (array_key_exists('query', $arUrl) && strlen($arUrl['query']) > 0)
{
$arUrl['path_query'] .= '?' . $arUrl['query'];
}
return $arUrl;
}
function NormalizePhone($number, $minLength = 10)
{
$minLength = intval($minLength);
if ($minLength <= 0 || strlen($number) < $minLength)
{
return false;
}
if (strlen($number) >= 10 && substr($number, 0, 2) == '+8')
{
$number = '00'.substr($number, 1);
}
$number = preg_replace("/[^0-9\#\*]/i", "", $number);
if (strlen($number) >= 10)
{
if (substr($number, 0, 2) == '80' || substr($number, 0, 2) == '81' || substr($number, 0, 2) == '82')
{
}
else if (substr($number, 0, 2) == '00')
{
$number = substr($number, 2);
}
else if (substr($number, 0, 3) == '011')
{
$number = substr($number, 3);
}
else if (substr($number, 0, 1) == '8')
{
$number = '7'.substr($number, 1);
}
else if (substr($number, 0, 1) == '0')
{
$number = substr($number, 1);
}
}
return $number;
}
function InputType($strType, $strName, $strValue, $strCmp, $strPrintValue=false, $strPrint="", $field1="", $strId="")
{
$bCheck = false;
if($strValue <> '')
{
if(is_array($strCmp))
$bCheck = in_array($strValue, $strCmp);
elseif($strCmp <> '')
$bCheck = in_array($strValue, explode(",", $strCmp));
}
$bLabel = false;
if ($strType == 'radio')
$bLabel = true;
return ($bLabel? '<label>': '').'<input type="'.$strType.'" name="'.$strName.'" id="'.($strId <> ''? $strId : $strName).'" value="'.$strValue.'">'.($strPrintValue? $strValue:$strPrint).($bLabel? '</label>': '');
}
function TruncateText($strText, $intLen)
{
if(strlen($strText) > $intLen)
return rtrim(substr($strText, 0, $intLen), ".")."...";
else
return $strText;
}
function extract_url($s)
{
$s2 = '';
while(strpos(",}])>.", substr($s, -1, 1))!==false)
{
$s2 = substr($s, -1, 1);
$s = substr($s, 0, strlen($s)-1);
}
$res = chr(1).$s."/".chr(1).$s2;
return $res;
}
// Переобразуем HTML в текст, сохраняя переносы и пробелы
function HTMLToTxt($str, $strSiteUrl="", $aDelete=array(), $maxlen=70)
{
//get rid of whitespace
$str = preg_replace("/[\\t\\n\\r]/", " ", $str);
//replace tags with placeholders
static $search = array(
"'<script[^>]*?>.*?</script>'si",
"'<style[^>]*?>.*?</style>'si",
"']*?>.*?'si",
"'&(quot|#34);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
);
static $replace = array(
"",
"",
"",
"\"",
"\xa1",
"\xa2",
"\xa3",
"\xa9",
);
$str = preg_replace($search, $replace, $str);
$str = preg_replace("#<[/]{0,1}(b|i|u|em|small|strong)>#i", "", $str);
$str = preg_replace("#<[/]{0,1}(font|div|span)[^>]*>#i", "", $str);
//ищем списки
$str = preg_replace("#]*>#i", "\r\n", $str);
$str = preg_replace("#]*>#i", "\r\n - ", $str);
//удалим то что задано
foreach($aDelete as $del_reg)
$str = preg_replace($del_reg, "", $str);
//ищем картинки
$str = preg_replace("/(|\\s*>)/is", "[".chr(1).$strSiteUrl."\\3".chr(1)."] ", $str);
$str = preg_replace("/(|\\s*>)/is", "[".chr(1)."\\3".chr(1)."] ", $str);
//ищем ссылки
$str = preg_replace("/()(.*?)<\\/a>/is", "\\6 [".chr(1).$strSiteUrl."\\3".chr(1)."] ", $str);
$str = preg_replace("/()(.*?)<\\/a>/is", "\\6 [".chr(1)."\\3".chr(1)."] ", $str);
//ищем <br>
$str = preg_replace("#]*>#i", "\r\n", $str);
//ищем <br>
$str = preg_replace("#]*>#i", "\r\n\r\n", $str);
//ищем <hr>
$str = preg_replace("#]*>#i", "\r\n----------------------\r\n", $str);
//ищем таблицы
$str = preg_replace("#<[/]{0,1}(thead|tbody)[^>]*>#i", "", $str);
$str = preg_replace("#<([/]{0,1})th[^>]*>#i", "<\\1td>", $str);
$str = preg_replace("##i", "\t", $str);
$str = preg_replace("##i", "\r\n", $str);
$str = preg_replace("#]*>#i", "\r\n", $str);
$str = preg_replace("#\r\n[ ]+#", "\r\n", $str);
//мочим вообще все оставшиеся тэги
$str = preg_replace("#<[/]{0,1}[^>]+>#i", "", $str);
$str = preg_replace("#[ ]+ #", " ", $str);
$str = str_replace("\t", " ", $str);
//переносим длинные строки
if($maxlen > 0)
$str = preg_replace("#([^\\n\\r]{".intval($maxlen)."}[^ \\r\\n]*[\\] ])([^\\r])#", "\\1\r\n\\2", $str);
$str = str_replace(chr(1), " ",$str);
return trim($str);
}
/**
* Функция фильтрует строку и устанавливает формат вывода телефонного номера
* @param string $phone Строка с телефоном
* @return string
*/
function setFormatPhone($phone)
{
$phone = preg_replace("/[^0-9]/", "", $phone);
if(strlen($phone) == 7)
$phone = preg_replace("/([0-9]{3})([0-9]{2})([0-9]{2})/", "$1-$2-$3", $phone);
elseif(strlen($phone) == 10)
$phone = preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "($1)$2-$3", $phone);
elseif(strlen($phone) == 11)
{
$phone = preg_replace("/([0-9])([0-9]{3})([0-9]{3})([0-9]{4})/", "$1($2)$3-$4", $phone);
$first = substr($phone, 0, 1);
if(in_array($first, array(7, 8)))
$phone = '+7'. substr($phone, 1);
}
return $phone;
}
getNameDay($date = false)
/**
* Получаем название дня недели
* @param string|int $date
* @return string
*/
function getNameDay($date = false)
{
if(!$date)
$date = mktime();
$date = is_int($date) ? $date : strtotime($date);
$names = array(
'Monday' => 'Понедельник',
'Tuesday' => 'Вторник',
'Wednesday' => 'Среда',
'Thursday' => 'Четверг',
'Friday' => 'Пятница',
'Saturday' => 'Суббота',
'Sunday' => 'Воскресенье'
);
return $names[ date("l", $date) ];
getDaysFromWeek($week = false, $format = 'd.m.Y');
//Функция возвращает интервал дат по номеру недели:
/**
* По номеру недели функция возвращает интервал дат от понедельника до воскресенья.
* @param int $week Порядковый номер недели в году
* @param type $format Формат выводимой даты, по умолчанию 'd.m.Y'
* @return array
*/
function getDaysFromWeek($week = false, $format = 'd.m.Y')
{
if(!$week)
$week = date("W");
$result['today'] = date($format);
$result['begin'] = date($format, strtotime(date("W") - date("W") ." week -". (date("w") == 0 ? 6 : date("w") - 1) ." day"));
$result['end'] = date($format, strtotime($result['begin']) + 60 * 60 * 24 * 6);
$result[] = $result['begin'];
for($i = 1; $i < 7; $i++)
$result[] = date($format, strtotime($result['begin']) + 60 * 60 * 24 * $i);
return $result;
}
//Функция для генерации паролей и любых строк заданной длины. Второй параметр может быть массивом классов символов. Если он указан, тогда в результирующую строчку войдет минимум один символ из каждого класса. Функция выдернута из CMS-Bitrix
randString($pass_len=10, $pass_chars=false)
function randString($pass_len=10, $pass_chars=false)
{
static $allchars = "abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLNMOPQRSTUVWXYZ0123456789";
$string = "";
if(is_array($pass_chars))
{
while(strlen($string) < $pass_len)
{
if(function_exists('shuffle'))
shuffle($pass_chars);
foreach($pass_chars as $chars)
{
$n = strlen($chars) - 1;
$string .= $chars[mt_rand(0, $n)];
}
}
if(strlen($string) > count($pass_chars))
$string = substr($string, 0, $pass_len);
}
else
{
if($pass_chars !== false)
{
$chars = $pass_chars;
$n = strlen($pass_chars) - 1;
}
else
{
$chars = $allchars;
$n = 61; //strlen($allchars)-1;
}
for ($i = 0; $i < $pass_len; $i++)
$string .= $chars[mt_rand(0, $n)];
}
return $string;
}
echo randString(7, array(
"abcdefghijklnmopqrstuvwxyz",
"ABCDEFGHIJKLNMOPQRSTUVWXYZ",
"0123456789",
"!@#\$%^&*()",
));
/**
* Function of processing of variables for a conclusion in a stream
* Функция обработки переменных для вывода в поток
*/
htmlChars($data);
function htmlChars($data)
{
if(is_array($data))
$data = array_map("htmlChars", $data);
else
$data = htmlspecialchars($data);
return $data;
}
/**
* Function of processing of variables for a conclusion in a stream
* Функция обработки переменных для вывода в поток
*/
function htmlChars_decode($data)
{
if(is_array($data))
$data = array_map("htmlChars_decode", $data);
else
$data = htmlspecialchars_decode($data);
return $data;
}
drawTable($data, $tabs = 0, $columns = 10)
/**
* Table division
* Деление таблицы
*/
function drawTable($data, $tabs = 0, $columns = 10)
{
$tbl = null;
if($tabs === false)
{
$tr = $td = null;
}
else
{
$tr = "\n".str_repeat("\t", $tabs);
$td = $tr."\t";
}
for($i = 0, $n = 1, $d = ceil(count($data) / $columns) * $columns; $i < $d; $i++, $n++)
{
if($n == 1)
$tbl .= $tr."\n";
$tbl .= $td."\n".(isset($data[$i]) ? $data[$i] : ' ')."\n";
if($n == $columns)
{
$n = 0;
$tbl .= $tr.'';
}
}
if($tabs !== false)
$tbl .= "\n";
return $tbl;
/*
$gallery = "";
$gallery .= drawTable($rows, IRB_IMAGES_ROWS, IRB_IMAGES_COLUMNS);
$gallery .= "
"; */ }
//Чтобы положить в БД строку, её лучше обработать этой штукой:
/**
* Function of processing of literal constants for SQL
* Функция обработки литеральных констант для SQL
*/
function escapeString($data)
{
if(is_array($data))
$data = array_map("escapeString", $data);
else
$data = mysql_real_escape_string($data);
return $data;
}
function uploadHandle($file_name, $max_file_size = 100, $extensions = array(), $upload_dir = '.', $out_name = false)
{
$error = null;
$info = null;
$max_file_size *= 1024;
if ($_FILES[$file_name]['error'] === UPLOAD_ERR_OK)
{
// проверяем расширение файла
$file_extension = pathinfo($_FILES[$file_name]['name'], PATHINFO_EXTENSION);
if (in_array($file_extension, $extensions))
{
// проверяем размер файла
if ($_FILES[$file_name]['size'] < $max_file_size)
{
// новое имя файла
if($out_name)
$out_name = str_replace('.'.$file_extension, '', $out_name) .'.'. $file_extension;
else
$out_name = mt_rand(mt_rand(10, 1000), 100000) .'_'. $_FILES[$file_name]['name'];
$destination = $upload_dir .'/' . $out_name;
if(move_uploaded_file($_FILES[$file_name]['tmp_name'], $destination))
$info = LANG_FILE_MESS_OK;
else
$error = LANG_FILE_MESS_ERR_LOAD;
}
else
$error = LANG_FILE_MESS_MAX_SIZE;
}
else
$error = LANG_FILE_MESS_ERR_EXT;
}
else
{
// массив ошибок
$error_values = array(
UPLOAD_ERR_INI_SIZE => LANG_FILE_ERR_INI_SIZE,
UPLOAD_ERR_FORM_SIZE => LANG_FILE_ERR_FORM_SIZE,
UPLOAD_ERR_PARTIAL => LANG_FILE_ERR_PARTIAL,
UPLOAD_ERR_NO_FILE => LANG_FILE_ERR_NO_FILE,
UPLOAD_ERR_NO_TMP_DIR => LANG_FILE_ERR_NO_TMP_DIR,
UPLOAD_ERR_CANT_WRITE => LANG_FILE_ERR_CANT_WRITE
);
$error_code = $_FILES[$file_name]['error'];
if (!empty($error_values[$error_code]))
$error = $error_values[$error_code];
else
$error = LANG_FILE_MESS_BUG;
}
return array('info' => $info, 'error' => $error, 'name' => $out_name);
}
translateIt($text, $direct = 'ru_en');
/**
* Transliteration function
* Функция транслитерации текста
* @param string $text
* @param string $direct
* @return string
*/
function translateIt($text, $direct = 'ru_en')
{
$L['ru'] = array(
'Ё', 'Ж', 'Ц', 'Ч', 'Щ', 'Ш', 'Ы',
'Э', 'Ю', 'Я', 'ё', 'ж', 'ц', 'ч',
'ш', 'щ', 'ы', 'э', 'ю', 'я', 'А',
'Б', 'В', 'Г', 'Д', 'Е', 'З', 'И',
'Й', 'К', 'Л', 'М', 'Н', 'О', 'П',
'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ъ',
'Ь', 'а', 'б', 'в', 'г', 'д', 'е',
'з', 'и', 'й', 'к', 'л', 'м', 'н',
'о', 'п', 'р', 'с', 'т', 'у', 'ф',
'х', 'ъ', 'ь'
);
$L['en'] = array(
"YO", "ZH", "CZ", "CH", "SHH","SH", "Y'",
"E'", "YU", "YA", "yo", "zh", "cz", "ch",
"sh", "shh", "y'", "e'", "yu", "ya", "A",
"B" , "V" , "G", "D", "E", "Z", "I",
"J", "K", "L", "M", "N", "O", "P",
"R", "S", "T", "U", "F", "X", "''",
"'", "a", "b", "v", "g", "d", "e",
"z", "i", "j", "k", "l", "m", "n",
"o", "p", "r", "s", "t", "u", "f",
"x", "''", "'"
);
// Конвертируем хилый и немощный в великий могучий...
if($direct == 'en_ru')
{
$translated = str_replace($L['en'], $L['ru'], $text);
// Теперь осталось проверить регистр мягкого и твердого знаков.
$translated = preg_replace('/(?<=[а-яё])Ь/u', 'ь', $translated);
$translated = preg_replace('/(?<=[а-яё])Ъ/u', 'ъ', $translated);
}
else // И наоборот
$translated = str_replace($L['ru'], $L['en'], $text);
// Заменяем пробел на нижнее подчеркивание
$translated = str_replace(' ', '_', $translated);
// Возвращаем получателю.
return $translated;
}
/*
* xmlToArray() will convert the given XML text to an array in the XML structure.
* Link: http://www.bin-co.com/php/scripts/xmlToArray/
* Arguments : $contents - The XML text
* $get_attributes - 1 or 0. If this is 1 the function will get the attributes as well as the tag values - this results in a different array structure in the return value.
* $priority - Can be 'tag' or 'attribute'. This will change the way the resulting array sturcture. For 'tag', the tags are given more importance.
* Return: The parsed XML in an array form. Use print_r() to see the resulting array structure.
* Examples: $array = xmlToArray(file_get_contents('feed.xml'));
* $array = xmlToArray(file_get_contents('feed.xml', 1, 'attribute'));
* xmlToArray($contents, $get_attributes, $priority)
*/
function xmlToArray($contents, $get_attributes = 1, $priority = 'tag')
{
if(!$contents) return array();
if(!function_exists('xml_parser_create')) {
//print "'xml_parser_create()' function not found!";
return array();
}
//Get the XML parser of PHP - PHP must have this module for the parser to work
$parser = xml_parser_create('');
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); # http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, trim($contents), $xml_values);
xml_parser_free($parser);
if(!$xml_values) return;//Hmm...
//Initializations
$xml_array = array();
$parents = array();
$opened_tags = array();
$arr = array();
$current = &$xml_array; //Refference
//Go through the tags.
$repeated_tag_index = array();//Multiple tags with same name will be turned into an array
foreach($xml_values as $data) {
unset($attributes,$value);//Remove existing values, or there will be trouble
//This command will extract these variables into the foreach scope
// tag(string), type(string), level(int), attributes(array).
extract($data);//We could use the array by itself, but this cooler.
$result = array();
$attributes_data = array();
if(isset($value)) {
if($priority == 'tag') $result = $value;
else $result['value'] = $value; //Put the value in a assoc array if we are in the 'Attribute' mode
}
//Set the attributes too.
if(isset($attributes) and $get_attributes) {
foreach($attributes as $attr => $val) {
if($priority == 'tag') $attributes_data[$attr] = $val;
else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
}
}
//See tag status and do the needed.
if($type == "open") {//The starting of the tag ''
$parent[$level-1] = &$current;
if(!is_array($current) or (!in_array($tag, array_keys($current)))) { //Insert New tag
$current[$tag] = $result;
if($attributes_data) $current[$tag. '_attr'] = $attributes_data;
$repeated_tag_index[$tag.'_'.$level] = 1;
$current = &$current[$tag];
} else { //There was another element with the same tag name
if(isset($current[$tag][0])) {//If there is a 0th element it is already an array
$current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
$repeated_tag_index[$tag.'_'.$level]++;
} else {//This section will make the value an array if multiple tags with the same name appear together
$current[$tag] = array($current[$tag],$result);//This will combine the existing item and the new item together to make an array
$repeated_tag_index[$tag.'_'.$level] = 2;
if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well
$current[$tag]['0_attr'] = $current[$tag.'_attr'];
unset($current[$tag.'_attr']);
}
}
$last_item_index = $repeated_tag_index[$tag.'_'.$level]-1;
$current = &$current[$tag][$last_item_index];
}
} elseif($type == "complete") { //Tags that ends in 1 line ''
//See if the key is already taken.
if(!isset($current[$tag])) { //New Key
$current[$tag] = $result;
$repeated_tag_index[$tag.'_'.$level] = 1;
if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data;
} else { //If taken, put all things inside a list(array)
if(isset($current[$tag][0]) and is_array($current[$tag])) {//If it is already an array...
// ...push the new element into that array.
$current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
if($priority == 'tag' and $get_attributes and $attributes_data) {
$current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
}
$repeated_tag_index[$tag.'_'.$level]++;
} else { //If it is not an array...
$current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value
$repeated_tag_index[$tag.'_'.$level] = 1;
if($priority == 'tag' and $get_attributes) {
if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well
$current[$tag]['0_attr'] = $current[$tag.'_attr'];
unset($current[$tag.'_attr']);
}
if($attributes_data) {
$current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
}
}
$repeated_tag_index[$tag.'_'.$level]++; //0 and 1 index is already taken
}
}
} elseif($type == 'close') { //End of tag ''
$current = &$parent[$level-1];
}
}
return($xml_array);
}
wrapperText($text, $length, $bgn, $end, $encoding)
/**
* Оборачиваем текст в указанные теги по определённой длине.
* @param string $text Текст, строки которого нужно обернуть в теги.
* @param integer $length По умолчанию 100
* @param string $bgn По умолчанию '
' * @param string $end По умолчанию '
' * @param string $encoding По умолчанию 'UTF-8' * @return string */ function wrapperText($text = '', $length = 100, $bgn = '
', $end = '
', $encoding = 'UTF-8') { if(empty($text) || empty($length)) return ''; $line = ''; $rows = array(); $array = explode(' ', $text); for($i = 0; $i < count($array); $i++) { if(mb_strlen($line .' '. $array[$i], $encoding) < $length) $line .= ' '. $array[$i]; else { $rows[] = trim($line); $line = $array[$i]; } if($i == (count($array) - 1) && !empty($line)) $rows[] = trim($line); } return $bgn . implode($end . $bgn, $rows) . $end; }
cropText($string, $maxlen, $link, $encoding)
/**
* Функция обрезает текст по окончании слова.
* Если задан параметр $link, то в конце текста вставляется ссылка с адресом $link.
* @param string $string Строка которую нужно обрезать.
* @param integer $maxlen Количество символов до обрезания.
* @param string $link URL address.
* @param string $encoding Кодировка текста, по умолчанию "UTF-8".
* @return string
*/
function cropText($string = '', $maxlen = 100, $link = false, $encoding = "UTF-8")
{
$len = (mb_strlen($string, $encoding) > $maxlen)
? mb_strripos(mb_substr($string, 0, $maxlen, $encoding), ' ', 0, $encoding)
: $maxlen;
$cutStr = rtrim(mb_substr($string, 0, $len, $encoding), "., |()/");
$result = (mb_strlen($string, $encoding) > $maxlen) ? $cutStr .'...' : $cutStr;
if(!$link)
return trim($result);
else
{
// Цифра 1130 несёт в себе временный костыль, на её месте должно быть
// число 30. Проблема связана с кодировкой сервера.
if(strlen($result) < 20)
return ''. $result .'';
//$pos = mb_strripos($result, ' ', round(mb_strlen($result, $encoding) / 3), $encoding);
$pos = mb_strrpos($result, ' ', -round(mb_strlen($result, $encoding) / 3), $encoding);
$string_bgn = mb_substr($result, 0, $pos, $encoding);
$string_end = mb_substr($result, $pos, 1000, $encoding);
return trim($string_bgn .' '. $string_end .'');
}
}
clearText($text)
/**
* Текст на выходе должен содержать HTML-документ.
* Необходимо удалить все HTML-теги, секции javascript, пробельные символы.
* Также необходимо заменить некоторые HTML-сущности на их эквивалент.
* @param string $text Входящий текст
* @return string
*/
function clearText($text)
{
$search = array ("']*?>.*?'si", // Вырезает javaScript
"'<[\/\!]*?[^<>]*?>'si",// Вырезает HTML-теги
"'([\r\n])[\s]+'", // Вырезает пробельные символы
"'&(quot|#34);'i", // Заменяет HTML-сущности
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(\d+);'e"); // интерпретировать как php-код
$replace = array ("",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");
return preg_replace($search, $replace, $text);
}
function clean_phone_number($phone) {
if (!empty($phone)) {
//var_dump($phone);
preg_match_all('/[0-9\(\)+.\- ]/s', $phone, $cleaned);
foreach($cleaned[0] as $k=>$v) {
$ready .= $v;
}
var_dump($ready);
die;
if (mb_strlen($cleaned) > 4 && mb_strlen($cleaned) <=25) {
return $cleaned;
}
else {
return false;
}
}
return false;
}
//$extension = substr($file_name, strrpos($file_name, "."));
//$extension = end(explode(".", $file_name));
function formspecialchars($var)
{
$pattern = '/&(#)?[a-zA-Z0-9]{0,};/';
if (is_array($var)) { // If variable is an array
$out = array(); // Set output as an array
foreach ($var as $key => $v) {
$out[$key] = formspecialchars($v); // Run formspecialchars on every element of the array and return the result. Also maintains the keys.
}
} else {
$out = $var;
while (preg_match($pattern,$out) > 0) {
$out = htmlspecialchars_decode($out,ENT_QUOTES);
}
$out = htmlspecialchars(stripslashes(trim($out)), ENT_QUOTES,'UTF-8',true); // Trim the variable, strip all slashes, and encode it
}
return $out;
}
function paginator($count, $limit, $page, $url = null, $name = 'page', $block = 33) {
if (!$url) {
$url = $_SERVER['REQUEST_URI'];
if (mb_strstr($url, '?'.$name.'=')) $url = preg_replace('/\?'.$name.'=[0-9]*/', '', $url);
}
if (!$limit) $limit = 10;
if ($count <= $limit) return;
$page_list = null;
if (strstr($url, '?')) $qw = '&';
else $qw = '?';
if ($page > $block) {
$i = floor($page/ $block);
$i = $i * $block;
if ($i == $page) $i--;
$a_url = $url.$qw.$name.'='.$i;
$page_list .= '<br><<<br>';
} else $i = 0;
for ($j = 0; $i < ceil($count / $limit), $j < $block; $i++, $j++) {
if ($i * $limit >= $count) break;
if ($i == $page-1) {
$a_url = $url.$qw.$name.'='.$page;
if ($page != $i + 1) $page_list .= '<br>'.($i + 1).'<br>';
else $page_list .= '<br>'.($i + 1).'<br>';
} else {
$a_url = $url.$qw.$name.'='.($i + 1);
if ($page != $i + 1) $page_list .= '<br>'.($i + 1).'<br>';
else $page_list .= '<br>'.($i + 1).'<br>';
}
}
if ($i < ceil($count / $limit)) {
$a_url = $url.$qw.$name.'='.($i + 1);
$page_list .= '<br>>><br>';
}
return '<br>'.$page_list.'<br>';
}
function pagination($numRows, $rowsPerPage=1){
$pageParamNm = "page";
$pages = ceil( $numRows/$rowsPerPage );
if ( $pages < 2 ) return "";
$res = "Страница ";
if ( array_key_exists("page", $_GET)){
$currentPage = is_numeric($_GET[$pageParamNm]) ? $_GET[$pageParamNm] : 1;
unset( $_GET[$pageParamNm] );
} else {
$currentPage = 1;
}
$params = '';
foreach ( $_GET as $k=>$v){
$params .= $k . '=' . urlencode($v) . '&';
}
$path = explode( "?", $_SERVER['REQUEST_URI'] );
for ( $i = 1; $i <= $pages; $i++ ){
$res .= sprintf(
"%s",
$i == $currentPage ? $i : "{$i}"
);
}
return $res;
}
function paginator_extra($count, $limit, $page, $block = 12) {
if ($count <= $limit) return;
if ($page > $block) {
$i = floor($page / $block) * $block;
if ($i == $page) $i -= $block;
$pages_list .= '<br><<br>';
} else $i = 0;
for ($j = 0; $i < ceil($count / $limit), $j < $block; $i++, $j++) {
if ($i * $limit >= $count) break;
$pages_list .= ''.($i + 1).'';
}
if ($i < ceil($count / $limit)) $pages_list .= '<br>><br>';
return $pages_list;
}
Полезные функции PHP собраны в одном месте
Количество показов: 3128
Дата создания: 15.04.2016 18:47:39
Дата создания: 15.04.2016 18:47:39