Вырезаем из строки мусорные символы

Часто приходится вырезать из имён такие символы как сердечки,вопросы,знаки (♥�►◄) и т.д. Стандартного решения я не нашёл, google тоже не помог. Пришлось написать самому вот такую функцию/

<?php
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 <type> $str
 * @return <type>
 */
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('t♥e�s►t◄');
Результат

test


URL: https://visavi.net/articles/474