Просмотр файла 2/3020.ru/system/functions/text.php

Размер файла: 5.69Kb
<?php 
  
/*
-----------------------------------------------
Удаление в тексте лишних тегов в начале и конце
-----------------------------------------------
*/
  
FUNCTION SUB_TRIM($text) { 
  
  $text = PREG_REPLACE("{(<br[\\s]*(>|\/>)\s*){2,}}i", "<br /><br />", $text); 
  $text = PREG_REPLACE("{(<br[\\s]*(>|\/>)\s*)}i", "<br />", $text); 
  $text = PREG_REPLACE("{(<br[\\s]*(>|\/>)\s*){2,}}i", "</br></br>", $text); 
  
  RETURN $text; 

} 

/*
--------------------------
Вывод текста с настройками
--------------------------
*/
  
FUNCTION TEXT($text, $br = 1, $smiles = 1, $bb = 1, $link = 1)
{
  
  //$text - выводимый текст
  //$smiles - вставка смайлов
  //$br - перенос строк
  //$bb - вывод bb кодов
  //$link - обработка и вывод ссылок
  
  $text = STRIPSLASHES(HTMLSPECIALCHARS($text, ENT_QUOTES, 'UTF-8'));
  
  IF ($smiles == 1){
    
    $text = SMILES($text);
    
  }
  
  IF ($br == 1){
    
    $text = NL2BR($text);
  
  }
  
  IF ($bb == 1){
    
    $text = BB_CODE($text);
  
  }
  
  IF ($link == 1){
    
    $text = LINKS($text);
  
  }
  
  $text = SUB_TRIM($text);
  
  RETURN $text;

}

/*
--------------------------------------
Вывод абсолютного текста без bb-кодов,
форматирований и т.п.
--------------------------------------
*/
  
FUNCTION TEXT_ABSOLUTE($text)
{
  
  RETURN STRIPSLASHES(HTMLSPECIALCHARS($text, ENT_QUOTES, 'UTF-8'));

}

/*
--------------------------------------------------
Вывод текста без спец.символов. Только a-z,
цифры и некоторые необходимые символы. В противном
случае спец.символы и пробел заменяются
--------------------------------------------------
*/

FUNCTION TEXT_PROCESSING($text)
{
  
  $special_chars = ARRAY( '?', '[', ']', '/', '\\', '=', '<', '>', ':', ';', ',', "'", '"', '&', '$', '#', '*', '(', ')', '|', '~', '`', '!', '{', '}', '%', '+', chr( 0 ) );
  
  $text = PREG_REPLACE("#\x{00a0}#siu", ' ', $text);
  $text = STR_REPLACE($special_chars, '', $text);
  $text = STR_REPLACE(ARRAY('%20', '+' ), '-', $text);
  $text = PREG_REPLACE('/[\r\n\t -]+/', '-', $text);
  $text = TRIM($text, '.-_');	
  
  RETURN HTMLSPECIALCHARS($text);
  
}

/*
---------------------------------------------
Полное удаление символов из текста без замены
---------------------------------------------
*/

FUNCTION CLEARSPECIALCHARS($text)
{
  
  $special_chars = ARRAY( '?', '[', ']', '/', '\\', '=', '<', '>', ':', ';', ',', "'", '"', '&', '$', '#', '*', '(', ')', '|', '~', '`', '!', '{', '}', '%', '+', chr( 0 ) );
  
  $text = PREG_REPLACE("#\x{00a0}#siu", ' ', $text);
  $text = STR_REPLACE($special_chars, '', $text);
  $text = STR_REPLACE(ARRAY('%20', '+' ), '', $text);
  $text = TRIM($text, '.-_');	
  
  RETURN HTMLSPECIALCHARS($text);
  
}

/*
--------------------------------
Перевод русских букв в аглийские
--------------------------------
*/

FUNCTION TRANSLIT($value)
{
	
  $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',
    
  );
  
  $value = STRTR($value, $converter);
  
  RETURN $value;
  
}

/*
----------------------
Функция обрезки текста
----------------------
*/

FUNCTION CROP_TEXT($text, $min, $max){
  
  //$text - текст который нужно обрезать
  //$min - обрезка начала текста
  //$max - обрезка конца текста
  
  $out = '';
  
  $arr = PREG_SPLIT('/(<.+?>|&#?\\w+;)/s', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
  $tagStack = ARRAY();
  
  FOR ($i = 0, $l = 0; $i < COUNT($arr); $i++) {
    
    IF ($i & 1) {
      
      IF (MB_SUBSTR($arr[$i], 0, 2, 'UTF-8') == '</' OR MB_SUBSTR($arr[$i], 0, 2, 'UTF-8') == '[/') {
        
        ARRAY_POP($tagStack);
      
      }ELSEIF($arr[$i][0] == '&') {
        
        $l++;
      
      }ELSEIF(MB_SUBSTR($arr[$i], -2) != '/>' OR MB_SUBSTR($arr[$i], -2) != '/]') {
        
        ARRAY_PUSH($tagStack, $arr[$i]);
      
      }
      
      $out .= $arr[$i];
    
    }ELSEIF(MB_SUBSTR($arr[$i], -2) != '/>' ) {
      
      IF (($l += STRLEN($arr[$i])) >= $max) {
        
        $out .= MB_SUBSTR($arr[$i], $min, $max - $l + STRLEN($arr[$i]));
        
        BREAK;
      
      }ELSE{
        
        $out .= $arr[$i];
      
      }
    
    }
  
  }
  
  WHILE(($tag = ARRAY_POP($tagStack)) !== NULL) {
    
    $out .= '</' . STRTOK(MB_SUBSTR($tag, 1), " \t>") . '>';
  
  }
  
  IF ($max - 10 < STR($out)){
    
    $text2 = $out." ...";
    
  }ELSE{
    
    $text2 = $out;
    
  }
  
  RETURN $text2;
  
}
  
?>