За последние 24 часа нас посетили 36511 программистов и 1718 роботов. Сейчас ищут 829 программистов ...

Поиск (обрезание)

Тема в разделе "PHP для новичков", создана пользователем AlexALX, 23 дек 2007.

  1. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    Привет всем!

    Нужна помощь!

    мне нужно чтобы ... это для поиска, мне нужно точбы оно выводило не весь найденый текст (он может быть большым) а только например 100 символов перед тем словом что я ищу и 200 после, притом разделяло по пробелам, чтобы слова не обрезало, и не искало в html коде (типо <a href='www.test' оно найдёт тогда слово test и выведет ссылку, но мне этого не надо...)... переменная $text = "результат, тоетсь может быть большой текст"; переменная где задаётся искуемое слово это $_GET('show')

    жду ответа...
     
  2. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    вариант 1. вырезаешь все тэги, находишь слово, вырезаешь кусок в +-150 символов, обрезаешь до пробелов с обоих сторон.
    вариант 2. прикручиваешь гугол :)
     
  3. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
  4. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
  5. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    Код (Text):
    1. <?php
    2. $rest = substr("abcdef", 0, -1);  // возвращает "abcde"
    3. $rest = substr("abcdef", 2, -1);  // возвращает "cde"
    4. $rest = substr("abcdef", 4, -4);  // возвращает ""
    5. $rest = substr("abcdef", -3, -1); // возвращает "de"
    6. ?>
    спс, но как сделать так чтобы оно по пробелам разделяло, и в html коде не искало?
     
  6. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    > как сделать так чтобы оно по пробелам разделяло

    strpos + strrpos
     
  7. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    прочитал описание, нифига не понял
     
  8. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    ими находишь позиции пробелов справа и слева, потом с помощью substr обрезаешь
     
  9. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    Это всё хооршо, но как убрать поиск в html коде?

    sql запрос выглядит так:
    [sql]SELECT * FROM table WHERE name LIKE %test%;[/sql]
     
  10. Здыхлик

    Здыхлик Активный пользователь

    С нами с:
    24 дек 2007
    Сообщения:
    13
    Симпатии:
    0
    1. Обрезаем тэги:
    PHP:
    1.  
    2. $cursor = 0;
    3. $startpos = strpos($text,"<");
    4. while ($startpos!==false)
    5. {
    6.     $endpos = strpos($text,">",$startpos);
    7.     if ($endpos===false) $startpos=false;
    8.     else
    9.            {
    10.               $text = str_replace(substr($text,$startpos,$endpos-$startpos+1),"",$text);
    11.               $cursor=$startpos;
    12.            $startpos = strpos($text,"<",$cursor);
    13.            }
    14. }
    15.  
    Код приблизительный, но вроде должен работать. Можно вместо угловых скобок искать один из определенных тэгов (создаем Array с тэгами), если не хотим обрезать все тэги или твердо уверены в структуре текста.
    2. Далее ищем позицию искомого слова в тексте с помощью strpos, вычисляем координаты начала и конца текста. Кусок текста получим с помощью функции substr().
    3. Ищем от начала и от конца пробел функцией strpos, обрезаем нужное количество букаф с помощью substr().
     
  11. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
  12. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    создай отдельную таблицу с поисковым индексом и заноси туда текст без тэгов, знаков препинания и коротких слов, повесь полнотекстовой индекс и юзай match-against
     
  13. Здыхлик

    Здыхлик Активный пользователь

    С нами с:
    24 дек 2007
    Сообщения:
    13
    Симпатии:
    0
    Ыыы, а я такую функцию с нуля создавал... :oops: совсем про нее забыл
     
  14. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    не...

    ==
    за функцию спасибо! осталось только разобратся с пробелами)
     
  15. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    немогу понять как обрезать по пробелам никак О_о
     
  16. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    так, мне нужна (если есть такое, если нету - то как сделать) функция, которая будет обрезать слова (по пробелам) от определёного слова (переменная $show), тоесть:

    PHP:
    1.  
    2. $text = "много много много слово 000 слова много много много";
    3. $show = "000";
    4. # обрезать нужно всё что после 2-х слов после 000 спереди и сзади, чтобы получилось "...много слово 000 слова много..."
    5. $text1 = nl2br(stripslashes(strip_tags($text)));
    6.  
    + вопрос ещё один, как сделать чтобы в mysql запросе оно искало не точную фразу, а по словам, типо "читы+crysis"... хотя это уже не так важно
     
  17. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    http://php.ru/makemeperfect


     
  18. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
     
  19. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    то-то и оно...
     
  20. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    ?
     
  21. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    блин, помогите! пожалуйста! ну не могу я додуматся как сделать обрезание по пробелам... (
     
  22. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    ну блин! помогите! невыходит! из-за этой лажы я немогу завершить создания скрипта поиска.....

    Код (Text):
    1.         $text1 = nl2br(stripslashes(strip_tags($text)));
    2.  
    3.         $mystring = $text1;
    4. $findme   = $_GET['show'];
    5. $pos = strpos($mystring, $findme);
    6.  
    7. if ($pos === true) {
    8.     $text1 = substr($text1, 2, $pos);
    9. }
    нифига не могу понять как убирать по пробелам, да и чёо даже не выходит сделать от определённого слова убирать по символам хотябы...
     
  23. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    нужно просто внимательно прочитать ман.
     
  24. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    AlexALX

    почему б не разбивать строку через prag_match_all() или split();
     
  25. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    прочитал ВНИМАТЕЛЬНО, и скажи мне, где в substr задавать с какого символа начинать удалять в -20 символов и в +20 символов, там нельзя так.