Работа со строками...

codsteep

Новичок
Работа со строками...

Есть строка состоящая из нескольких слов.
Неоходимо из каждого слова в сторке длинее 5-и символов убрать 2 последних буквы..., все пробелы заменить '% %'(слово1% %слово2% %слово3)
Пока сделанно так.
PHP:
$_POST['s_text']="POST    POSTER ";//сама строка

$s_text=htmlspecialchars($_POST['s_text']);
$c=trim($s_text);//убираем пробелы с обоих сторон
$c = ereg_replace(" +"," ",$c);//убираем все лишние пробелы в строке
$c = explode(" ", $c);//разбиваем в массив
$n_arr_str="";
//перебираем массив, провереяя длину строки
//и если длина больше 5, убираем 2 посл. символа
foreach($c as $key=>$val){
if (strlen($val)>5) $val=substr_replace($val, '', -2);
$n_arr_str.=$val." ";//заносим строку в переменную $n_arr_str разделяя слова пробелами
}
$n_arr_str=trim($n_arr_str);//в конце получится пробел - убираем.
$n_arr_str=str_replace(" ","% %",$n_arr_str);//заменяем пробелы на '% %'
echo "$n_arr_str";
А может есть способ получше? Например регулярными... Посоветуйте...
 

Demiurg

Guest
$words = explode(' ' , $str);
$norm_words = array();
foreach($words as $word)
{
if($word=='') continue;
if(strlen($word)>5)$norm_words[] = substr($word , 0 , -2);
else $norm_words[] = $word;
}
$final_str = implode('% %' , $norm_words);

не проверял, может где то ошибся.
 

Фанат

oncle terrible
Команда форума
не забудьте заискейпить в строке % и _
ну и про слеши, конечно.

-~{}~ 27.05.04 12:56:

кстати, а какой смыссл в финальной строке?

-~{}~ 27.05.04 12:59:

и смысл htmlspecialchars?
 

codsteep

Новичок
Данные приходят из поста...htmlspecialchars нужен т.к. исходная строка будет потом выводиться,
заискейпить... ?? Что, зачем?
А сама строка будет вставлятся в запрос поиска
PHP:
mysql_query("SELECT * FROM tovar WHERE  name_t LIKE '%".(addslashes($final_str))."%' ORDER BY id_sk,name_t");
 

Фанат

oncle terrible
Команда форума
htmlspecialchars нужен т.к. исходная строка будет потом выводиться,
так выводиться будет ПОТОМ.
а htmlspecialchars ты делаешь СЕЙЧАС.
нелогично.
заискейпить... ?? Что
на вопрос ЧТО, я, кажется, ответил.
на вопрос почему я бы ответил, но, вроде бы, ты и сам понимаешь, что означает символ %.
А сама строка будет вставлятся в запрос поиска
вот мне и странно - какой смывсл поиска по такой строке.
или это такой способ искать точное совпадение подстроки не учитывая словоформы?
представляю, сколь повеселит этот поиск пользователей.
 

Demiurg

Guest
странный у тебя запрос получится. Помоему он будет делать не то, что ты хочешь.
 

codsteep

Новичок
2Фанат Поиск будет без словоформ...Убрать окончания хватит. По поводу пользователей... Ну там я один... Помоему простейший поиск, который и нужен.
По поводу ескейпа, всё же не понял... В какой части код не заискепенная строка представляет проблемы?
Могу привести весь код...)
2Demiurg Ну... он вроде искать будет. Оно и надо :)
 

Demiurg

Guest
Будет найден текст в котором слова идут точно в той же последовательности как и в запросе. Ты уверен, что нужно именно это ?
 

Demiurg

Guest
WHERE name_t LIKE '%..%' and name_t LIKE '%...%' ..
хотя наверно лучше использовать полнотекстовый индекс.
 

Фанат

oncle terrible
Команда форума
люблю я таких вопросителей.
из которых надо клещами надо вытаскивать, что они делают, и которые уперты в том , что делают правильно
 

codsteep

Новичок
2Фанат ты не прав... Я не был уверен, что делаю правильно, иначе не спросил бы. Так что по поводу ескейпа. Я не знаю, где он может повредить?
Спасибо за ответы, буду делать с FULLTEXT.
 
Сверху