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 :: preg_replace замена подстрок в строке

 PHP.SU

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


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

> Описание: подскажите как заменить в цикле , массиве, или поочереди
broshurkaplus
Отправлено: 13 Февраля, 2011 - 22:36:47
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


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




подставляю смайлы в коменты
есть код ява
CODE (htmlphp):
скопировать код в буфер обмена
  1.  function addsmile($num) {
  2.         window.document.form_com.coment.value=window.document.form_com.coment.value+"[smile]"+ $num+"[/smile] ";
  3.  }
  4. </script>

добавляет коды смайла в текстареа

в таблице ввода комента есть ссылки которые добавляют смайлы
PHP:
скопировать код в буфер обмена
  1. <a href="javascript:addsmile(3);"><img src="smiles/3.gif"></a><a href="javascript:addsmile(4);"><img src="smiles/4.gif"></a><a href="javascript:addsmile(5);"><img src="smiles/5.gif"></a><a href="javascript:addsmile(6);"><img src="smiles/6.gif"></a><a href="javascript:addsmile(7);"><img src="smiles/7.gif"></a><a href="javascript:addsmile(8);"><img src="smiles/8.gif">


при выводе комента обрабатываю
PHP:
скопировать код в буфер обмена
  1. coment=$r_img_coment["coment"];
  2. $coment=preg_replace("/\[smile\](\d+)\[\/smile\]/i",  "<img src='smiles/1.gif'> ",$r_img_coment["coment"]);


и вывожу $coment

подскажите как мне в цикле или в массиве сделать чтобы каждому коду смайла подставлялся соответствующая картинка

если так как показано, то заменяются все, если поочереди и(или) заменяя (\d+) на
(1) (2) и тд
PHP:
скопировать код в буфер обмена
  1. coment=$r_img_coment["coment"];
  2. $coment=preg_replace("/\[smile\](1)\[\/smile\]/i",  "<img src='smiles/1.gif'> ",$r_img_coment["coment"]);
  3. $coment=preg_replace("/\[smile\](2)\[\/smile\]/i",  "<img src='smiles/2.gif'> ",$r_img_coment["coment"]);


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

что сделать ?
 
 Top
Okula
Отправлено: 13 Февраля, 2011 - 23:02:32
Post Id



Участник


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


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




Заменяй из массива
 
 Top
JustUserR
Отправлено: 14 Февраля, 2011 - 13:32:33
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




broshurkaplus пишет:
То заменяется тока последний , хотя по идее он вродебы должно заменять сначала первое, затем второе и тд
Что сделать ?
Возможной причиной осуществления некорректной работы предполагаемого PHP-приложения является использование операции замены строковых элементов на основе регулярного выражения с одиночным прохождением поиска - в то время как для обеспечения последовательной замены допустимых вхождений необходимо использование модификатора /g


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
broshurkaplus
Отправлено: 14 Февраля, 2011 - 14:26:10
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


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




те нужно в рег выражении добавить модификатор /g так полагаю в конце? :

"/\[smile\](1)\[\/smile\]/i/g"

попробую вечером.
 
 Top
movEAX
Отправлено: 14 Февраля, 2011 - 19:00:39
Post Id



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


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


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




Я немного разочарую, но модификатора g в пыхе нет, небыло и скорее всего не будет.

PHP:
скопировать код в буфер обмена
  1. preg_replace_callback('#\[smile\]\s*(\d+)\s*\[/smile\]#i', 'validateSmile', $text);
  2. function validateSmile($match) {
  3.     $id = $match[1];
  4.     return is_file(($img = 'path/' . $id . '.gif'))? $img : '';
  5. }

(Отредактировано автором: 14 Февраля, 2011 - 19:01:39)



-----
армия.. самое убогое место
 
 Top
OrmaJever Модератор
Отправлено: 14 Февраля, 2011 - 19:11:47
Post Id



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


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


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




А зачем делать тег smile? Однако
Вот например в phpbb смайлы в сообщении пишут так
1"%1, 2"%1, 3"%1 и тд.
А затем эту последовательность символов меняем на изображение.

PHP:
скопировать код в буфер обмена
  1. str_replace('1"%1', '<img src="images/smiles/1gif">',$_POST['textarea']);

(Отредактировано автором: 14 Февраля, 2011 - 19:12:14)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
broshurkaplus
Отправлено: 14 Февраля, 2011 - 19:22:34
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


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




с модификатором /g чтото не заработало, я почитал - выдало что он вроде для явы, а у меня это обрабатывается в пхп при просмотре комментариев , которые выводятся в цикле из базы.
Okula пишет:
Заменяй из массива

что то тоже не сработало , хотя я исправил ошибки и вроде всё правильно, может с именами напутал...

сделал так
PHP:
скопировать код в буфер обмена
  1.    $coment=$r_img_coment["coment"];
  2. $coment=preg_replace("/\[smile\](1)\[\/smile\]/i",  "<img src='smiles/1.gif'> ",$coment);
  3. $coment=preg_replace("/\[smile\](2)\[\/smile\]/i",  "<img src='smiles/2.gif'> ",$coment);
  4. $coment=preg_replace("/\[smile\](3)\[\/smile\]/i",  "<img src='smiles/3.gif'> ",$coment);


всё заменило соответствующе везде, я просто не так строку передал, и никто и не указал мне.

теперь думаю как бы мне это в функцию завернуть, чтоб вынести отдельно, а то пример на 3х смалах, а сто если их будет 30... и хоцца чтобы их изначально не было в форме а показывались по ссылке.

подскажете направление мысли?

пака буду пробовать последнее.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB