IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   PHP удаление мусора из переменной. (http://www.imho.ws/showthread.php?t=146912)

GrOgy 16.03.2012 05:04

PHP удаление мусора из переменной.
 
Есть функция
function tag_SIMSEARCHES($num_similar)
{
global $similar_row;
$result = '';

$similar_row = arrayUniqueByRow($similar_row, 1);

if ( !empty($similar_row) ){
foreach ($similar_row as $values) {
if(preg_match("/by [a-z]+$/i",$values[1]))
continue;
$uri = make_uri( S_SEARCH, array (P_KW => $values[1] ) );
$first_let = strtolower( substr($values[1],0,1) );
$result .= "<a href='/$first_let$uri'> $values[1] </a>, ";
}

$result = trim($result);
$result = trim($result,',');
}


return $result;
}

Которая формирует линки на сайте. Иногда в линках бывает мусор - (небуквенно цифровые символы) Вопрос как очистить $values[1] от мусора?
Пробовал делать так -
foreach ($similar_row as $values) {
$values[1]=preg_replace('~[^0-9a-z\(\)\/+\-_\[\]",\|\*\(\)!\~@#$%&;{}<>:\'\~\. ]~i',"",$values[1]);
НЕ помогает.

Hubbitus 17.03.2012 09:00

С одной стороны говорите что все надо исключить кроме букв и цифр, а с другой стороны стольк исключений добавляете.

Код:

$values[1]=preg_replace('~[^\d\w]~i', "", $values[1]);
должно помочь.

P.S. Жуткий код.

GrOgy 20.03.2012 10:46

Сработало, но нужно формировать анкоры вида
word1 word2 word3 - ваша регулярка вобще все пробелы удаляет, а нужно вырезать весь мусора и оставить только один пробел между словами.

Hubbitus 20.03.2012 19:54

Этого не было обозначено изначально:
Код:

$values[1] = preg_replace(array('~[^\d\w ]~i', '~ {2,}~'), array('', ' '), $values[1]);

GrOgy 21.03.2012 08:12

Все замечательно работает и мусор вырезается кроме нижнего подчеркивания "_", оно почему то не вырезается =(
И нужно удалять знак пробела в самом начале (перед анкором) если он там появился после обработки.

Hubbitus 21.03.2012 19:22

Код:

$values[1] = preg_replace(array('~[^\da-zA-Z ]~i', '~ {2,}~'), array('', ' '), $values[1]);
?

GrOgy 22.03.2012 09:43

Да благодарю, все работает, но есть одна загвоздка.
Иногда нужно обрабатывать строки вида.

_150 Gamehouse(Games) Pack, на выходе нужно получить
150 Gamehouse Games Pack, но регулярка делает -
150 GamehouseGamesPack. Если поставить пробел в регулярке - array(' ', ' '), то получается - пробел150 Gamehouse Games Pack, что тоже недопустимо. Решил сделать вот такую регулярку -
Код:

$values[1] = ltrim(preg_replace(array('~[^\da-zA-Z ]~i', '~ {2,}~'), array(' ', ' '), $values[1]));
Все заработало, но может быть есть более элегантное решение?

Hubbitus 22.03.2012 10:35

Аппетит призодит во время еды?

Код:

$values[1] = preg_replace(array('~^[^\da-zA-Z ]~i', '~[^\da-zA-Z ]~i', '~ {2,}~'), array('', ' ', ' '), $values[1]);
или
Код:

$values[1] = implode(' ', preg_split('~[^\da-zA-Z]+~i', $values[1], -1, PREG_SPLIT_NO_EMPTY));


Часовой пояс GMT +4, время: 08:15.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.