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
Форумы портала PHP.SU :: Версия для печати :: Отображение результатов поиска по сайту [2]
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Отображение результатов поиска по сайту

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

16. vsll - 01 Марта, 2011 - 21:03:34 - перейти к сообщению
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. }
17. OrmaJever - 01 Марта, 2011 - 21:15:47 - перейти к сообщению
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 параметре.
18. vsll - 01 Марта, 2011 - 21:45:17 - перейти к сообщению
то что после for - это точно скопированное описание, другого там нет, я не знаю что нужно изменять в этой функции, чтобы было TRUE, а не как у меня во всех найденных результатах фрагмент был равен 0 Это пока сложно для меня
19. OrmaJever - 01 Марта, 2011 - 22:18:48 - перейти к сообщению
я про вот эту строку
PHP:
скопировать код в буфер обмена
  1. $text = nl2br(stripslashes(preg_match_all("~\s(.{50,70})($sphrase)(.{50,70})\s~uisU",$text,$matches)."..."));

Зачем её пропускать ещё через 2 функции? там будет только true или false.
20. vsll - 02 Марта, 2011 - 13:26:04 - перейти к сообщению
Попробовала так:
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 ...
21. OrmaJever - 02 Марта, 2011 - 13:35:44 - перейти к сообщению
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);
22. vsll - 02 Марта, 2011 - 13:43:17 - перейти к сообщению
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

 

Powered by ExBB FM 1.0 RC1