Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Отображение результатов поиска по сайту [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Описание: Изменить готовый скрипт поиска по сайту
vsll
Отправлено: 01 Марта, 2011 - 21:03:34
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1. function search_striphtmlbbcodes($text) {
  2.         $text = preg_replace("[\[(.*?)\]]", "", $text);
  3.         $text = preg_replace("<\<(.*?)\>>", "", $text);
  4.         return $text;
  5. }
  6.  
  7. function search_textfrag($text) {
  8.         $text = nl2br(stripslashes(substr(stristr($text, $_GET['stext']), 0, 500)."..."));
  9.         return $text;
  10. }

(Отредактировано автором: 01 Марта, 2011 - 21:04:18)

 
 Top
OrmaJever
Отправлено: 01 Марта, 2011 - 21:15:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Vasiliya пишет:
Что не так?
PHP:
скопировать код в буфер обмена
  1. function search_textfrag($text) {
  2.         $sphrase = $_GET['stext'];
  3.         $text = nl2br(stripslashes(preg_match_all("~\s(.{50,70})($sphrase)(.{50,70})\s~uisU",$text,$matches)."..."));
  4.         for ( $i = 0 ; $i < count ( $matches [ 0 ]); $i ++) {
  5.             echo "matched: " . $matches [ 0 ][ $i ] . "\n" ;
  6.             echo "part 1: " . $matches [ 1 ][ $i ] . "\n" ;
  7.             echo "part 2: " . $matches [ 3 ][ $i ] . "\n" ;
  8.             echo "part 3: " . $matches [ 4 ][ $i ] . "\n" ;
  9.         }  
  10.         return $text;
  11. }

Прочитайте описание preg_match_all(), она возращает true или false а результаты будет в 3 параметре.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
vsll
Отправлено: 01 Марта, 2011 - 21:45:17
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




то что после for - это точно скопированное описание, другого там нет, я не знаю что нужно изменять в этой функции, чтобы было TRUE, а не как у меня во всех найденных результатах фрагмент был равен 0 Это пока сложно для меня
 
 Top
OrmaJever
Отправлено: 01 Марта, 2011 - 22:18:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




я про вот эту строку
PHP:
скопировать код в буфер обмена
  1. $text = nl2br(stripslashes(preg_match_all("~\s(.{50,70})($sphrase)(.{50,70})\s~uisU",$text,$matches)."..."));

Зачем её пропускать ещё через 2 функции? там будет только true или false.

(Отредактировано автором: 01 Марта, 2011 - 22:19:33)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
vsll
Отправлено: 02 Марта, 2011 - 13:26:04
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Попробовала так:
PHP:
скопировать код в буфер обмена
  1. function search_textfrag($text) {
  2.           $sphrase = $_GET['stext'];
  3.           $text = preg_match_all("~\s(.{50,70})($sphrase)(.{50,70})\s~uisU",$text,$matches);
  4.           for ( $i = 0 ; $i < count ( $matches [ 0 ]); $i ++) {
  5.           echo "matched: " . $matches [ 0 ][ $i ] . "\n" ;
  6.           echo "part 1: " . $matches [ 1 ][ $i ] . "\n" ;
  7.           echo "part 2: " . $matches [ 3 ][ $i ] . "\n" ;
  8.           echo "part 3: " . $matches [ 4 ][ $i ] . "\n" ;
  9.           }  
  10.           return $text;
  11. }

Ошибки:
Warning: preg_match_all() [function.preg-match-all]: Compilation failed: invalid UTF-8 string at offset 14 in ...
 
 Top
OrmaJever
Отправлено: 02 Марта, 2011 - 13:35:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




1) строка из $_GET['stext'] не в utf-8
2) переменая в регулярке врядле будет работать

CODE (htmlphp):
скопировать код в буфер обмена
  1. "~\s(.{50,70})(".$sphrase.")(.{50,70})\s~uisU"


хотя я так и не понял зачем регулярка?
Можно же как я предлогал на строковых функциях.
PHP:
скопировать код в буфер обмена
  1. substr($str, strpos($str, $search_word) - 50, strlen($str) + 50);

(Отредактировано автором: 02 Марта, 2011 - 13:38:44)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
vsll
Отправлено: 02 Марта, 2011 - 13:43:17
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1. function search_textfrag($text) {
  2.           $sphrase = $_GET['stext'];
  3.           $text = nl2br(stripslashes(preg_match_all("~\s(.{50,70})(".$sphrase.")(.{50,70})\s~uisU",$text,$matches)."..."));
  4.           for ( $i = 0 ; $i < count ( $matches [ 0 ]); $i ++) {
  5.           echo "matched: " . $matches [ 0 ][ $i ] . "\n" ;
  6.           echo "part 1: " . $matches [ 1 ][ $i ] . "\n" ;
  7.           echo "part 2: " . $matches [ 3 ][ $i ] . "\n" ;
  8.           echo "part 3: " . $matches [ 4 ][ $i ] . "\n" ;
  9.           }  
  10.           return $text;
  11. }

Да, переменная в регулярном выражении не работает (та же ошибка с utf)
Если так
PHP:
скопировать код в буфер обмена
  1. function search_textfrag($text) {
  2.         $text = nl2br(stripslashes(substr($text, strpos($text, $_GET['stext']) - 50, strlen($text) + 50)."..."));
  3.         return $text;
  4. }
то отображается весь текст,
Если так,
PHP:
скопировать код в буфер обмена
  1. function search_textfrag($text) {
  2.         $text = nl2br(stripslashes(substr($text, strpos($text, $_GET['stext']) - 50, strlen($_GET['stext']) + 50)."..."));
  3.         return $text;
  4. }

то 50 символов до искомого слова и заканчивается поисковой фразой плюс .... В принципе тоже работает
Путём брутального подбора, получено окончательное решение (даже лучше, чем моё первое):
PHP:
скопировать код в буфер обмена
  1. function search_textfrag($text) {
  2.         $text = nl2br(stripslashes("...".substr($text, strpos($text, $_GET['stext']) - 100, strlen($_GET['stext']) + 200)."..."));
  3.         return $text;
  4. }
Тогда 100 симовлов до поисковой фразы и 100 символов после.
Спасибо, OrmaJever

(Отредактировано автором: 02 Марта, 2011 - 14:20:56)

 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB