Pull to refresh

Вырезаем мусорные специальные символы на php

Здравствуйте, хотел бы поделится способом вырезания специальных символов на php. Столкнулся я с данной проблемой при написании поисковика по базе youtube. В результатах api в именах и описаниях видео попадались символы, сердечки, стрелки, наушники и т.д (�►◄). Готовых решений я не нашел, пришлось написать собственную функцию.

php функция


/**
* Функция была взята с php.net
**/
function utf8_str_split($str) { 
  // place each character of the string into and array 
  $split=1; 
  $array = array(); 
  for ( $i=0; $i < strlen( $str ); ){ 
    $value = ord($str[$i]); 
    if($value > 127){ 
      if($value >= 192 && $value <= 223) 
        $split=2; 
      elseif($value >= 224 && $value <= 239) 
        $split=3; 
      elseif($value >= 240 && $value <= 247) 
        $split=4; 
    }else{ 
      $split=1; 
    } 
      $key = NULL; 
    for ( $j = 0; $j < $split; $j++, $i++ ) { 
      $key .= $str[$i]; 
    } 
    array_push( $array, $key ); 
  } 
  return $array; 
} 
/** 
 * Функция вырезки
 * @param <string> $str 
 * @return <string> 
 */ 
function clearstr($str){ 
        $sru = 'ёйцукенгшщзхъфывапролджэячсмитьбю'; 
        $s1 = array_merge(utf8_str_split($sru), utf8_str_split(strtoupper($sru)), range('A', 'Z'), range('a','z'), range('0', '9'), array('&',' ','#',';','%','?',':','(',')','-','_','=','+','[',']',',','.','/','\\')); 
        $codes = array(); 
        for ($i=0; $i<count($s1); $i++){ 
                $codes[] = ord($s1[$i]); 
        } 
        $str_s = utf8_str_split($str); 
        for ($i=0; $i<count($str_s); $i++){ 
                if (!in_array(ord($str_s[$i]), $codes)){ 
                        $str = str_replace($str_s[$i], '', $str); 
                } 
        } 
        return $str; 
} 
?> 


Использование


echo clearstr('te�s►t◄'); 

Результат


test


Описание метода работы функции


Полученный аргумент (строка) разбивается по символам в массив, затем символы переводятся в ASCII-код и сравниваются с заранее заготовленным массивом разрешенных символов. Если символ не прошел сравнение, вырезается, отформатированная строка возвращается. Таким образом мы вырезали все символы кроме: А-Я, A-Z, 0-9, &, пробел, #;%?:()- _=+[],./\
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.