Автоматическое удаление повторяющихся смайликов в сообщении
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
-
Поручик
- Former team member
- Сообщения: 3942
- Стаж: 21 год 4 месяца
- Откуда: Оренбург (Южный Урал)
- Благодарил (а): 24 раза
- Поблагодарили: 54 раза
Автоматическое удаление повторяющихся смайликов в сообщении
Спросили в привате на офсайте.
Ищется идея, как в сообщении автоматически заменить несколько подряд идущих одинаковых смайликов.
Сама тема с демонстрацией здесь.
Reduce Smilies
http://www.phpbb.com/community/viewtopi ... &t=1300325
Добавлено спустя 17 минут 8 секунд:
А собственно, идея есть. В цикле по таблице смайлов сформировать массив регулярок и потом заменить на один смайлик. Примерно также делается в автоцензоре. Вечером проверю.
Всем спасибо за советы.
Ищется идея, как в сообщении автоматически заменить несколько подряд идущих одинаковых смайликов.
Сама тема с демонстрацией здесь.
Reduce Smilies
http://www.phpbb.com/community/viewtopi ... &t=1300325
Добавлено спустя 17 минут 8 секунд:
А собственно, идея есть. В цикле по таблице смайлов сформировать массив регулярок и потом заменить на один смайлик. Примерно также делается в автоцензоре. Вечером проверю.
Всем спасибо за советы.
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции
наш форум http://forum.aeroion.ru/cat1.html
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции
наш форум http://forum.aeroion.ru/cat1.html
-
Поручик
- Former team member
- Сообщения: 3942
- Стаж: 21 год 4 месяца
- Откуда: Оренбург (Южный Урал)
- Благодарил (а): 24 раза
- Поблагодарили: 54 раза
Re: Автоматическое удаление повторяющихся смайликов в сообщении
Нет, нихрена не получается с регулярками. Думается мне, что решать задачу надо через разбиение строки на массив по пробелам, далее цикл по массиву, удалять повторяющиеся смайлики, а потом объединять строку из массива. Что-то вроде связки preg_split, implode.
Но как-то всё по жо%&*ному выглядит.
Кстати, нашел тему для двойки
http://www.phpbbguru.net/community/topic12495.html
Но как-то всё по жо%&*ному выглядит.
Кстати, нашел тему для двойки
http://www.phpbbguru.net/community/topic12495.html
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции
наш форум http://forum.aeroion.ru/cat1.html
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции
наш форум http://forum.aeroion.ru/cat1.html
-
Поручик
- Former team member
- Сообщения: 3942
- Стаж: 21 год 4 месяца
- Откуда: Оренбург (Южный Урал)
- Благодарил (а): 24 раза
- Поблагодарили: 54 раза
Re: Автоматическое удаление повторяющихся смайликов в сообщении
Как-то так получилось
Может и не совсем красиво, но зато работает.
Добавлено спустя 17 минут 30 секунд:
Типа "тихо сам с собой я веду беседу".
Недостатки данного подхода видны сразу: в сообщении режутся все повторяющиеся пробелы, что возможно будет недопустимо для текста в тэге code.
В общем задачка нетривиальная, судя по тому, что в аналогичной теме для двойки так никто и не ответил, даже тогдашние корифеи.
Код: Выделить всё
$message_array = preg_split ('/[ ]+/', $this->message);//explode(' ', $this->message);
foreach ($smiles_code as $smile_code)
{
$i = 0; ;
while ($i <= sizeof($message_array))
{
$str = ($message_array[$i] == $smile_code) ? $smile_code : '';
if ($str == $smile_code && $message_array[$i + 1] == $smile_code)
{
array_splice($message_array, $i + 1, 1);
}
else
{
$i++;
}
}
}
$this->message = implode(' ', $message_array);
Добавлено спустя 17 минут 30 секунд:
Типа "тихо сам с собой я веду беседу".
Недостатки данного подхода видны сразу: в сообщении режутся все повторяющиеся пробелы, что возможно будет недопустимо для текста в тэге code.
В общем задачка нетривиальная, судя по тому, что в аналогичной теме для двойки так никто и не ответил, даже тогдашние корифеи.
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции
наш форум http://forum.aeroion.ru/cat1.html
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции
наш форум http://forum.aeroion.ru/cat1.html
-
RedNaxi
- Former team member
- Сообщения: 933
- Стаж: 19 лет 7 месяцев
- Откуда: BeBoss.ru
- Благодарил (а): 2 раза
- Поблагодарили: 14 раз
Re: Автоматическое удаление повторяющихся смайликов в сообщении
А такой вариант:
у меня вроде работает
Код: Выделить всё
open
includes/message_parser.php
find
//(assertion)
$match[] = '(?<=^|[\n .])' . preg_quote($row['code'], '#') . '(?![^<>]*>)';
$replace[] = '<!-- s' . $row['code'] . ' --><img src="{SMILIES_PATH}/' . $row['smiley_url'] . '" alt="' . $row['code'] . '" title="' . $row['emotion'] . '" /><!-- s' . $row['code'] . ' -->';
replace with
//(assertion) [edited] reduce smiles by RedNaxi
$match[] = '(([ ]*)(?<=^|[\n .])' . preg_quote($row['code'], '#') . '(?![^<>]*>))+';
$replace[] = ' <!-- s' . $row['code'] . ' --><img src="{SMILIES_PATH}/' . $row['smiley_url'] . '" alt="' . $row['code'] . '" title="' . $row['emotion'] . '" /><!-- s' . $row['code'] . ' -->';
Последний раз редактировалось RedNaxi 17.11.2008 18:09, всего редактировалось 1 раз.
-
Поручик
- Former team member
- Сообщения: 3942
- Стаж: 21 год 4 месяца
- Откуда: Оренбург (Южный Урал)
- Благодарил (а): 24 раза
- Поблагодарили: 54 раза
Re: Автоматическое удаление повторяющихся смайликов в сообщении
Так, небольшое дополнение. Удалим все повторяющиеся смайлы до проверки на максимальное количество их в сообщении. Таким образом, окончательное? решение выглядит так:
Добавлено спустя 12 минут 41 секунду:
Товарищ updown благодарит всех.
Код: Выделить всё
#
#--- [OPEN] ---------------
#
includes/message_parser.php
#
#--- [FIND] ---------------
#
$match[] = '(?<=^|[\n .])' . preg_quote($row['code'], '#') . '(?![^<>]*>)';
$replace[] = '<!-- s' . $row['code'] . ' --><img src="{SMILIES_PATH}/' . $row['smiley_url'] . '" alt="' . $row['code'] . '" title="' . $row['emotion'] . '" /><!-- s' . $row['code'] . ' -->';
#
#--- [REPLACE WITH] ---------------
#
//[edited] reduce smiles by RedNaxi
$match[] = '(([ ]*)(?<=^|[\n .])' . preg_quote($row['code'], '#') . '(?![^<>]*>))+';
$replace[] = ' <!-- s' . $row['code'] . ' --><img src="{SMILIES_PATH}/' . $row['smiley_url'] . '" alt="' . $row['code'] . '" title="' . $row['emotion'] . '" /><!-- s' . $row['code'] . ' -->';
#
#--- [FIND] ---------------
#
if ($max_smilies)
{
#
#--- [Add Before] ---------------
#
$this->message = trim(preg_replace(explode(chr(0), '#' . implode('#' . chr(0) . '#', $match) . '#'), '\1', $this->message));Товарищ updown благодарит всех.
Thank you very much!! I also will try your coding from the request-topic this late evening!
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции
наш форум http://forum.aeroion.ru/cat1.html
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции
наш форум http://forum.aeroion.ru/cat1.html
-
Поручик
- Former team member
- Сообщения: 3942
- Стаж: 21 год 4 месяца
- Откуда: Оренбург (Южный Урал)
- Благодарил (а): 24 раза
- Поблагодарили: 54 раза
Re: Автоматическое удаление повторяющихся смайликов в сообщении
А кто бы тупо посмотрел на функцию smiley_text() в functions_content.php, чтобы найти решение, как удалить повторяющиеся смайлики в существущих постах при генерации страницы?
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции
наш форум http://forum.aeroion.ru/cat1.html
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции
наш форум http://forum.aeroion.ru/cat1.html
-
RedNaxi
- Former team member
- Сообщения: 933
- Стаж: 19 лет 7 месяцев
- Откуда: BeBoss.ru
- Благодарил (а): 2 раза
- Поблагодарили: 14 раз
Re: Автоматическое удаление повторяющихся смайликов в сообщении
в общем я
вроде работает
и родил такое решение:Поручик писал(а): тупо посмотрел на функцию smiley_text() в functions_content.php
Код: Выделить всё
find
return preg_replace('#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/.*? \/><!\-\- s\1 \-\->#', '\1', $text);
replace with
return preg_replace('#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/(.*?) \/><!\-\- s\1 \-\->([\s]*<!\-\- s\1 \-\-><img src="\{SMILIES_PATH\}\/\2 \/><!\-\- s\1 \-\->)*#', '\1', $text);
find
return preg_replace('#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/(.*?) \/><!\-\- s\1 \-\->#', ' <img src="' . $phpbb_root_path . $config['smilies_path'] . '/\2 />', $text);
relace with
return preg_replace('#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/(.*?) \/><!\-\- s\1 \-\->([\s]*<!\-\- s\1 \-\-><img src="\{SMILIES_PATH\}\/\2 \/><!\-\- s\1 \-\->)*#', ' <img src="' . $phpbb_root_path . $config['smilies_path'] . '/\2 />', $text);
-
Палыч
- Former team member
- Сообщения: 9683
- Стаж: 20 лет 4 месяца
- Откуда: Питер
- Благодарил (а): 3 раза
- Поблагодарили: 454 раза
Re: Автоматическое удаление повторяющихся смайликов в сообщении
маленькая ложка дёгтя....
если повтор разбивается, то не сработает
например

если повтор разбивается, то не сработает
например
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
-
RedNaxi
- Former team member
- Сообщения: 933
- Стаж: 19 лет 7 месяцев
- Откуда: BeBoss.ru
- Благодарил (а): 2 раза
- Поблагодарили: 14 раз
Re: Автоматическое удаление повторяющихся смайликов в сообщении
задача была:
про разбивающийся повтор ни слова, хотя можно конечно подумать, регулярками решаемо я думаю, да только каждое усложнение будет давать лишнюю нагрузку...
так что задача по сути решена:)updown писал(а):I want to disallow more than one identical smiley in a row and reduce them automatically to one smiley
For example:
![]()
![]()
![]()
![]()
![]()
![]()
output:
![]()
or an other example:
![]()
![]()
![]()
![]()
![]()
![]()
![]()
will be:
![]()
![]()
![]()
Has anybody an idea how to implement this in message_parser?
про разбивающийся повтор ни слова, хотя можно конечно подумать, регулярками решаемо я думаю, да только каждое усложнение будет давать лишнюю нагрузку...

