Помогите разобраться с функцией, вырезает лишнее

 
0
 
PHP
ava
lollollollol | 30.09.2013, 13:19
Здравствуйте, есть функция которая вырезает все лишние символы из переменной


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; 
      elseif($value >= 10 && $value <= 13) 
        $split=5; 
    }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('А', 'Я'),range('а', 'я'), range('a','z'), range('0', '9'), array('!',' ','@',';','%','?',':','(',')','-','_','=','+','[',']',',','.','*','\\',"\r","\n",0x0A,0x0D)); 
        $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; 
}





Вызывается так:

$result=clearstr($str);


Но проблема в том что оно убирает переносы строк.
Подскажите пожалуйста, как сделать так, чтобы функция оставляла переносы строк?


Я вроде бы в массив уже добавил "\r","\n",0x0A,0x0D , но не работает
Comments (7)
ava
baldina | 30.09.2013, 12:49 #
Цитата (lollollollol @  30.9.2013,  12:19 findReferencedText)
Я вроде бы в массив уже добавил "\r","\n",0x0A,0x0D , но не работает 

ну что-то не видно, что бы этот массив как-то использовался

btw есть мнение, что задачу можно решить немного проще
пусть $a - строка запрещенных символов, $b - исходная строка, тогда удалить запрещенные символы можно так

str_replace (str_split($a), $b);

ava
lollollollol | 30.09.2013, 13:18 #
Мне нужно оставить только те символы, которые в строке 34 моего кода, кстати там и используется этот массив.
остальные все убрать
ava
baldina | 30.09.2013, 13:47 #
т.е. "\r","\n",0x0A,0x0D надо оставить?
ava
lollollollol | 30.09.2013, 14:32 #
Верно, в этом массиве символы которые необходимо оставить
ava
baldina | 30.09.2013, 14:59 #

preg_replace ('/[^\w\r\n\.\\\+*=,;@%!\[\]]/u', '', $str);
ava
lollollollol | 30.09.2013, 22:36 #
Спасибо, но тоже самое, съедает перенос строки


    $messageP=preg_replace ('/[^\w\s\.\\\+\-*=,;:@%!\(\)\[\]]/u', '', $_POST['messageP']);
ava
lollollollol | 30.09.2013, 23:04 #
Извиняюсь, ошибся, всё в порядке, стормозил

Спасибо!
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit