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 :: Версия для печати :: вставка в строку доп тегов
Форумы портала PHP.SU » PHP » Программирование на PHP » вставка в строку доп тегов

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

1. Antonim - 06 Апреля, 2009 - 11:12:06 - перейти к сообщению
Доброго времени суток. Столкнулся с небольшой трудностью.. хотя на первый взгляд показалось просто, но вот что-то не получается.

Значит мне нужно выделить в строке жирным подстроки, которые искал пользователь.

Сначала сделал вот так:

$t[0] = str_ireplace ("$d","<b>$d</b>",$t[0]); где $t[0] - строка в которой заменяем , а $d - то, что ищет пользователь.

Но получается из строки

"Мама мыла раму"

с запросом например "мам" эта функция возвращает

"<b>мам</b>а мыла раму"

не подскажите как поступить.. сначала думал делать по strpost, но это перебор получится море функций. Наверное многи сталкивались с такой проблемой...
2. Гость - 06 Апреля, 2009 - 11:56:17 - перейти к сообщению
Регулярка такая получится типа s/(\S*?$t\S*?)/<b>$1</b>/gs;
Сами переведете на PHP Улыбка
3. UA.ProG - 06 Апреля, 2009 - 15:02:07 - перейти к сообщению
JustUserR пишет:
Регулярка такая получится типа s/(\S*?$t\S*?)/<b>$1</b>/gs;


Зачем использовать регулярку когда мы ищем простой текст?

Antonim пишет:
$t[0] = str_ireplace ("$d","<b>$d</b>",$t[0]); где $t[0] - строка в которой заменяем , а $d - то, что ищет пользователь.


У тебя просто скорее всего не правильный вывод результат
4. zeit - 06 Апреля, 2009 - 15:04:26 - перейти к сообщению
$str = preg_replace("/((^|[^а-яa-z]){$word}([^а-яa-z]|$))/i", "<strong>\\1</strong>", $str);
$word - слово для поиска в строке $str
5. Вездеход - 06 Апреля, 2009 - 15:07:52 - перейти к сообщению
бугага )
а я оригинальнее Радость Хорошо Хорошо

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $STRING         ="Мама мыла раму";
  4. $TEMPLATE       ="Мам";
  5. $RESULT         ="";
  6. $TAG_START      ="<b>";
  7. $TAG_END        ="</b>";
  8.  
  9. $STRING_SWC     =str_word_count($STRING, 2);                    // получаем массив со словами для обаботки
  10.  
  11. foreach($STRING_SWC as $val) {
  12.         if(stripos($STRING, $TEMPLATE)===false) {
  13.                 $RESULT.=$val." ";
  14.         }
  15.         else {
  16.                 $RESULT.=$TAG_START.$val.$TAG_END;
  17.         }              
  18. }
  19.  
  20. if(substr($RESULT, -1)==" " and substr($STRING, -1)!=" ") {
  21.         $RESULT=substr($RESULT, 0, -1);
  22.         $RESULT.=substr($STRING, -1);
  23. }
  24. ?>
  25.  


на работоспособность не проверял. =)
6. Antonim - 06 Апреля, 2009 - 15:52:35 - перейти к сообщению
UA.ProG пишет:

У тебя просто скорее всего не правильный вывод результат


как это непральный?

$t[0] = str_ireplace ("$d","<b>$d</b>",$t[0]); где $t[0] - строка в которой заменяем , а $d - то, что ищет пользователь.

Проблема в том, что заменяется содержимое строки например "МАМА МЫЛА РАМУ", а в поиск вбили "мама" и получим "мама МЫЛА РАМУ" регистр не контролируемый получается Недовольство, огорчение Недовольство, огорчение Недовольство, огорчение

мне ж нужно без учета регистра искать, а выделять то, что в строке с тем регистром, который там был!

Вот хотел найти позиции входа подстроки в строку и "вписать" в строку данные, НО не знаю как "вставить" св строку данные на определенное место ?? может кто подскажет?
7. Вездеход - 06 Апреля, 2009 - 16:08:20 - перейти к сообщению
Antonim
тебе уже 2 варианта предложили...
читай внимательнее
8. Antonim - 06 Апреля, 2009 - 17:14:31 - перейти к сообщению
Вездеход пишет:
Antonim
тебе уже 2 варианта предложили...
читай внимательнее


оба не работают.
9. zeit - 06 Апреля, 2009 - 17:19:38 - перейти к сообщению
Вот, проверил:

<?php
$str = "мама мыла раму";
print $str . "<br />";
$word = "мама";
$str = preg_replace("/((^|[^а-яa-z]){$word}([^а-яa-z]|$))/i", "<strong>\\1</strong>", $str);

print $str;

?>
10. Antonim - 06 Апреля, 2009 - 17:34:08 - перейти к сообщению
если вы введете не мама мыла раму, а мамантиха мыла раму, то работать не будет
11. Гость - 06 Апреля, 2009 - 18:01:35 - перейти к сообщению
Цитата:
Зачем использовать регулярку когда мы ищем простой текст?
Так нам надо не просто текст заменить а НАЙТИ СЛОВО - то есть набор символов между двумя пробельными символами и выделить се слово имеющее искомое вхождение
12. Antonim - 06 Апреля, 2009 - 18:08:16 - перейти к сообщению
JustUserR пишет:
Так нам надо не просто текст заменить а НАЙТИ СЛОВО - то есть набор символов между двумя пробельными символами и выделить се слово имеющее искомое вхождение


как раз нужно найти просто текст, но не заменить его, а справа и слева от этого текста поставить <b> и </b> соответственно
13. zeit - 06 Апреля, 2009 - 18:54:37 - перейти к сообщению
<?php

$str = "мамантиха мыла раму";
print $str . "<br />";

$word = "мама";
$str = preg_replace("/({$word})/i", "<b>\\1</b>", $str);

print $str;

?>
14. Antonim - 07 Апреля, 2009 - 10:01:48 - перейти к сообщению
zeit пишет:

$str = preg_replace("/({$word})/i", "<b>\\1</b>", $str);


Агромное спасибо. Все работает как надо.


Для тех кто будет то же делать добавите перед preg_replace стьроку:

setlocale(LC_ALL, 'ru_RU.CP1251');

для того, чтобы поиск был регистронезывисимый.

 

Powered by ExBB FM 1.0 RC1