Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> заменить в строчьне не более n смайликов 
:(
    Опции темы
Elfet
  Дата 20.12.2004, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



ну вообщем есть строчька со смайлами " :-) ............... :Р ............ 8-) ................:-)............... ;)....... "
как можно заменить в ней не более n смайликов на <img> , а остальные оставить без изменений?
smile

Это сообщение отредактировал(а) Elfet - 20.12.2004, 20:01


--------------------
PM MAIL WWW Skype   Вверх
penizillin
Дата 20.12.2004, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 10.11.2004

Репутация: 8
Всего: 9



считать (вслух).
PM MAIL ICQ   Вверх
Opik
Дата 20.12.2004, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Это JS:
Код

<script LANGUAGE="JavaScript">
var maxsmiles = 3;
for (i=0; i < sm.length; i+=3) {
  while(txt.indexOf(':'+sm[i]+':') >= 0) {
   txt = txt.replace(':'+sm[i]+':', '<img src=" '+sm[i]+'.gif">');
   if (++j >= maxsmiles) break;
  }
  if (j>=maxsmiles) break;
 }
</script>

где sm - массив, со смайлами...

Это сообщение отредактировал(а) Opr - 20.12.2004, 21:44
PM MAIL Skype   Вверх
$дмитрий
Дата 20.12.2004, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 17
Всего: 45



а это РНР smile

Код

$undo_smiles = ':( . .. ... ...... :D dswdd ,;, ;) sdsd s ';
$smiles = array(':(((',':((',':(',':)',':D',':?','8)','8|',';)',':e',':0',':|',':opss',':p',':help',':$');
$scr_smiles = array('6','4','10','0','1','2','3','5','7','8','9','11','12','13','14','15');
$sos  =  $undo_smiles;
$d=0;
for($z=0; $z< count($smiles); $z++)
{
if($d >= 3) break; else
{
$undo_smiles = str_replace("$smiles[$z]"," <img src=smiles/$scr_smiles[$z].gif border=0> ",$undo_smiles);
}
if($sos != $undo_smiles) {
$d++;
$sos = $undo_smiles;
}
}
echo $undo_smiles;


замени 3 на свою цифру!
PM MAIL   Вверх
IZ@TOP
Дата 21.12.2004, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



$дмитрий, помоему эта функция заменит сколь угодно смайлов, допустим если подрят идет сотня, то он и заменит сотню (хотя может я код не так прочел?).


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
$дмитрий
Дата 21.12.2004, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 17
Всего: 45



IZ@TOP
блин точно! надо че- то придумать!

Это сообщение отредактировал(а) $дмитрий - 21.12.2004, 01:40
PM MAIL   Вверх
IZ@TOP
Дата 21.12.2004, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



$дмитрий, strpos? Хотя это не выход. Надо наверное preg_replace_callback юзать.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Opik
Дата 21.12.2004, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



PHP:
Код

$sm = array("lol", "lol2", "lol3", "lol4");
$txt = ":lol: :lol2: :lol3: :lol4:";
$maxsmiles = 3;
for ($i=0; $i < sizeof($sm)-1; $i++) {
 $txt = str_replace(':'.$sm[$i].':', '<img src="'.$sm[$i].'.gif">', $txt);
  if ($i == $maxsmiles) break;

}
print $txt;

PM MAIL Skype   Вверх
penizillin
Дата 21.12.2004, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 10.11.2004

Репутация: 8
Всего: 9



обратите внимание на то, что, хоть переменная $maxsmiles равна 3, вы заменяете четыре смайла, если $sm будет больше.

Это сообщение отредактировал(а) penizillin - 21.12.2004, 19:08
PM MAIL ICQ   Вверх
Opik
Дата 21.12.2004, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



penizillin
ну и меняется 3, 4 это для проверки, что после 3-ех замен, оная замена больше не осуществляется...
PM MAIL Skype   Вверх
Alx
Дата 21.12.2004, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



Opr
хороший код!
никогда не приходило в голову, чтоб в for использовать break
smile


--------------------
PM MAIL WWW ICQ   Вверх
Elfet
Дата 21.12.2004, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Opr, а если в строке идут одинаковые смайлики, штук десять, оба твои кода из заменят как я понял smile

Цитата(Opr @ 21.12.2004, 18:27)
Код

Цитата
Код

Цитата(Opr @ 20.12.2004, 22:44)
Код

все эти три кода ограничивуют только количество используемых видов смайликов, а мне другое нада smile


--------------------
PM MAIL WWW Skype   Вверх
Opik
Дата 21.12.2004, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Не видов, а всего smile
Добавлено @ 21:41
ALEXANDRO
Можно ещё continue использовать
PM MAIL Skype   Вверх
Opik
Дата 21.12.2004, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Вообщем в коде всё равно есть недочеты smile
PM MAIL Skype   Вверх
IZ@TOP
Дата 21.12.2004, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Да, если у меня в сообщении подряд smile smile smile smile smile smile smile smile смайликов, то он их заменит все, даже если ограничение стоит в 3 смайла smile
Надо придумать как это обойти. Давайте подумаем вместе. Этакое задание, кто лучше сделает, плюсик будет.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Mal Hack
Дата 21.12.2004, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Код

<?php

$sm = array("lol", "lol2", "lol3", "lol4");
$txt = ":lol: :lol2: :lol3: :lol4:";

preg_match_all( "#\:(\w+?|\d+?)\:#i" , $txt , $matches );

$maxsmiles = 3;
$i = 0;
$cnt = 0;
while( ( $cnt < $maxsmiles ) && ( $i < sizeof( $matches[1] ) ) )
 {
  $txt = str_replace(':'.$sm[$i].':', '<img src="'.$sm[$i].'.gif">', $txt);
  $i++;
  $cnt++;
 }

print $txt;

?>


Это сообщение отредактировал(а) Mal Hack - 21.12.2004, 22:29
PM ICQ   Вверх
Opik
Дата 21.12.2004, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



А ты не думаешь, что $cnt тут лишнее?
Добавлено @ 23:11
Да и код, не лучше моего, та же проблема smile))
а если текст такой?
Цитата
:lol4: :lol2: :lol3: :lol4:

PM MAIL Skype   Вверх
Mal Hack
Дата 21.12.2004, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Код
<?php

$sm = array("lol", "lol2", "lol3", "lol4");
$txt = ":lol: :lol2: :lol3: :lol4:";

preg_match_all( "#\:(\w+?|\d+?)\:#i" , $txt , $matches );

$maxsmiles = 3;
$i = 0;
$cnt = 0;
while( ( $cnt < $maxsmiles ) && ( $i < sizeof( $matches[1] ) ) )
 {
  if( ! in_array( $matches[1][$i] , $sm ))
   {
    continue;
    $i++;
   }
  $p = strpos( $txt , $matches[0][$i],0);
  $txt = substr_replace($txt, '<img src="'.$matches[1][$i].'.gif">', $p , strlen($matches[0][$i]) );
  $i++;
  $cnt++;
 }

print $txt;

?>


Единмтвенно

Это сообщение отредактировал(а) Mal Hack - 21.12.2004, 23:41
PM ICQ   Вверх
Opik
Дата 22.12.2004, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Mal Hack
повторю вопрос, зачем тебе $cnt?
PM MAIL Skype   Вверх
penizillin
Дата 22.12.2004, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 10.11.2004

Репутация: 8
Всего: 9



особо не вчитывался в т.з. - поправьте, если ошибаюсь.
Код

$txt = ":aaa: :bbb: :ccc: :ddd: :eee: :fff: :ggg:
:hhh: :iii: :aaa: :bbb: :ccc: :ddd: :eee: :fff: :ggg:
:hhh: :iii: :aaa: :bbb: :ccc: :ddd: :eee: :fff: :ggg: :hhh: :iii:";

$pattern = "/\:(\w+)\:/i";
$replacement = "<img src='\${1}.gif' />";
echo preg_replace($pattern, $replacement, $txt, 3); //все дело в волшебных пузырьках


output:
Код

<img src='aaa.gif' />
<img src='bbb.gif' />
<img src='ccc.gif' />
:ddd:
:eee:
:fff:
:ggg:
[etc]
:aaa:
:bbb:
:ccc:
:ddd:
[etc]


Это сообщение отредактировал(а) penizillin - 22.12.2004, 01:38
PM MAIL ICQ   Вверх
Opik
Дата 22.12.2004, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



всё гениальное просто smile
PM MAIL Skype   Вверх
IZ@TOP
Дата 22.12.2004, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Тогда уж так, если нужна быстрота:

Код

# PHP5 Only
$MaxSmiles    = 10;

$sm    = array(
   'keys'   => array(
       ':p',
       ':)',
       ':D',
   ),
   'values'    => array(
       '<img src="/i/sm1.gif">',
       '<img src="/i/sm2.gif">',
       '<img src="/i/sm3.gif">',
   ),
);

$Content->Out = str_replace($sm['keys'], $sm['values'], $Content->Out, $MaxSmiles);

Добавлено @ 02:17
PS Пенецилин, плюс ставить не буду, уже есть smile
Добавлено @ 02:19
penizillin, не, не ошибаешься. твой вариант правда более универсальный, но могут быть ошибки если смайла нет допустим такого :sex: smile Но не в этом суть.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
penizillin
Дата 22.12.2004, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 10.11.2004

Репутация: 8
Всего: 9



правильно.

p.s. стоит приписать в комментарий над последней строкой "php5+ only".
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1620 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.