Как запретить повторяющиеся символы в теме?

Автор Astraller, 15 апреля 2011, 11:55:14

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Astraller

Задолбали "!!!!!!!!!!!" и "??????" в заголовке темы. Есть мод или опция настроек позволяющая их запретить?

Plut

Мод, ограничивающий количество смайлов в одном сообщении видел, символов - нет.

Astraller

Цитата: Plut от 15 апреля 2011, 19:06:10
Мод, ограничивающий количество смайлов в одном сообщении видел, символов - нет.
Мне нужно ограничить не кол-во символов в теле сообщения. А только знаков препинания в теме сообщения.

Plut

Astraller, знаки препинания тоже символы.  :)

Astraller

Цитата: Plut от 15 апреля 2011, 19:17:08
Astraller, знаки препинания тоже символы.  :)
Я просто уточнил. Честно говоря я немного удивлен. В большинстве виденных мной форумов такая функция включена в базе.

Plut

Astraller, программеру не составит (мне так кажется) труда написать функцию, сравнивающую и подсчитывающую заданные символы. Хоть "ы", хоть "!", для сервера это просто символы. Только просто так никто писать не будет, все люди занятые, тратить свое время никто не станет. Тут все админы своих сайтов, у всех есть свои заботы и нужды. Попробуй кого нибудь нанять за денежку, чтоб написали, если располагаешь свободными средствами.

Astraller

Цитата: Plut от 15 апреля 2011, 19:30:31
Astraller, программеру не составит (мне так кажется) труда написать функцию, сравнивающую и подсчитывающую заданные символы. Хоть "ы", хоть "!", для сервера это просто символы. Только просто так никто писать не будет, все люди занятые, тратить свое время никто не станет. Тут все админы своих сайтов, у всех есть свои заботы и нужды. Попробуй кого нибудь нанять за денежку, чтоб написали, если располагаешь свободными средствами.
Я прекрасно понимаю что здесь обитают занятые люди, но так же мне кажется странным что я первый столкнулся с такой проблемой, ибо при работе с молодым населением эта проблема начинает носить эпидемический характер :)

P.S. На самом деле я сам программист и знаю как это можно сделать, но к сожалению я не обладаю достаточными знаниями структуры SMF, и достаточным временем для их изучения :)

Inter

Цитата: Plut от 15 апреля 2011, 19:06:10
Мод, ограничивающий количество смайлов в одном сообщении видел, символов - нет.

в админке есть опция: разбивать слова длиннее...
или еще можно зацензурить символы повторения
I'm the law and you can't beat the law

|censored| 'em and their law

Crack down at sundown

Astraller

Цитата: Inter от 15 апреля 2011, 20:00:33
в админке есть опция: разбивать слова длиннее...
или еще можно зацензурить символы повторения
Дело в том что мне все равно до кол-ва этих символов в теле сообщения, мне важно что-бы их не было в заголовке.

Plut

Цитата: Astraller от 15 апреля 2011, 19:34:57
P.S. На самом деле я сам программист и знаю...
Странно тогда, что ты не знаешь, что язык общения с машиной - символы...

Astraller

Цитата: Plut от 15 апреля 2011, 20:13:26
Странно тогда, что ты не знаешь, что язык общения с машиной - символы...
Множество "знаки препинания" является подмножеством "символов", так что уточнение что меня интересуют именно знаки препинания я считаю нормальным. Вы хотите это оспорить? :)

И да, есть один момент который вам стоит знать: языков общения с машиной великое множество, особенно если рассматривать разные уровни этих языков, но если брать самый низкий уровень то это будет бинарный язык, символы находятся несколько выше :)

Макар

По теме . Раз мода нет. Есть знания пхп но нет знаний смф . Деньги есть но не охота их тратить , обрати внимание на функцию цензуры . Она обрабатывает как текст в теле сообщения так и в заголовке . Для ознакомления так сказать с механизмом, принципом и местом его действия. Глядишь и напишешь нужный тебе функционал :)
Если Вы здесь недавно, не обольщайтесь тоном некоторых дискуссий.
Все чаще слова - юзай поиск, приобретают смысл - иди в ж..........  Приобретение смысла автоматизированно - Ответы на любой вопрос по SMF
Не пишите несколько сообщений подряд - тут вам не Twitter  >:( в остальных ситуациях мы не сильно зверствуем 2funny

Astraller

Цитата: Макар от 15 апреля 2011, 20:36:11
По теме . Раз мода нет. Есть знания пхп но нет знаний смф . Деньги есть но не охота их тратить , обрати внимание на функцию цензуры . Она обрабатывает как текст в теле сообщения так и в заголовке . Для ознакомления так сказать с механизмом, принципом и местом его действия. Глядишь и напишешь нужный тебе функционал :)
Спасибо за подсказку. Был бы еще более благодарен если бы вы подсказали где конкретно эту функцию искать.

Inter

файл display.template.php там ищи массив с названием темы и при помощи регулярных выражений или строковых функций обрезай одинаковые символы
I'm the law and you can't beat the law

|censored| 'em and their law

Crack down at sundown

Mavn

Цитата: Astraller от 15 апреля 2011, 20:52:35
Спасибо за подсказку. Был бы еще более благодарен если бы вы подсказали где конкретно эту функцию искать.
логично искать в админке в одноименном пункте
поскольку функция применяется к темам и сообщения то и искать нужно в одноименном меню админки Сообщения и темы
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

Макар

#15
Цитата: Inter от 15 апреля 2011, 21:13:19
файл display.template.php там ищи массив с названием темы и при помощи регулярных выражений или строковых функций обрезай одинаковые символы

здрасте с какого перепугу искать в vievs  логику приложения (не ну конечно в смф виевс не особо чистый) но все же

ManagePosts.php  управление цензурой
// Set the censored words.
function SetCensor()
{
global $txt, $modSettings, $context, $smcFunc;

if (!empty($_POST['save_censor']))
{
// Make sure censoring is something they can do.
checkSession();

$censored_vulgar = array();
$censored_proper = array();

// Rip it apart, then split it into two arrays.
if (isset($_POST['censortext']))
{
$_POST['censortext'] = explode("\n", strtr($_POST['censortext'], array("\r" => '')));

foreach ($_POST['censortext'] as $c)
list ($censored_vulgar[], $censored_proper[]) = array_pad(explode('=', trim($c)), 2, '');
}
elseif (isset($_POST['censor_vulgar'], $_POST['censor_proper']))
{
if (is_array($_POST['censor_vulgar']))
{
foreach ($_POST['censor_vulgar'] as $i => $value)
{
if (trim(strtr($value, '*', ' ')) == '')
unset($_POST['censor_vulgar'][$i], $_POST['censor_proper'][$i]);
}

$censored_vulgar = $_POST['censor_vulgar'];
$censored_proper = $_POST['censor_proper'];
}
else
{
$censored_vulgar = explode("\n", strtr($_POST['censor_vulgar'], array("\r" => '')));
$censored_proper = explode("\n", strtr($_POST['censor_proper'], array("\r" => '')));
}
}

// Set the new arrays and settings in the database.
$updates = array(
'censor_vulgar' => implode("\n", $censored_vulgar),
'censor_proper' => implode("\n", $censored_proper),
'censorWholeWord' => empty($_POST['censorWholeWord']) ? '0' : '1',
'censorIgnoreCase' => empty($_POST['censorIgnoreCase']) ? '0' : '1',
);

updateSettings($updates);
}

if (isset($_POST['censortest']))
{
$censorText = htmlspecialchars($_POST['censortest'], ENT_QUOTES);
$context['censor_test'] = strtr(censorText($censorText), array('"' => '"'));
}

// Set everything up for the template to do its thang.
$censor_vulgar = explode("\n", $modSettings['censor_vulgar']);
$censor_proper = explode("\n", $modSettings['censor_proper']);

$context['censored_words'] = array();
for ($i = 0, $n = count($censor_vulgar); $i < $n; $i++)
{
if (empty($censor_vulgar[$i]))
continue;

// Skip it, it's either spaces or stars only.
if (trim(strtr($censor_vulgar[$i], '*', ' ')) == '')
continue;

$context['censored_words'][htmlspecialchars(trim($censor_vulgar[$i]))] = isset($censor_proper[$i]) ? htmlspecialchars($censor_proper[$i]) : '';
}

$context['sub_template'] = 'edit_censored';
$context['page_title'] = $txt['admin_censored_words'];
}



применение в post.php

код не выкладываю он размазан по файлу с 580 по 2800 строки

добавка
кстати пока писал пост , мысль пришла

можно цензуру не трогать а воспользоваться встроенной функцией парсинга и вырезки из названий тем хтмл и ббс кодов 

обратите внимание на subject этого моего сообщения
тег bold не обработан и оставлен as is
Re: Как [ b ] запретить [ /b ] повторяющиеся символы в теме?

может дописать правило к этой функции

еще добавка :)

или
посмотреть сюда
// Add 'Re: ' to the front of the subject.
if (trim($context['response_prefix']) != '' && $form_subject != '' && $smcFunc['strpos']($form_subject, trim($context['response_prefix'])) !== 0)
$form_subject = $context['response_prefix'] . $form_subject;


хотя нет ...............
идея №3 врятли подойдет для переработки .............  idiot








Если Вы здесь недавно, не обольщайтесь тоном некоторых дискуссий.
Все чаще слова - юзай поиск, приобретают смысл - иди в ж..........  Приобретение смысла автоматизированно - Ответы на любой вопрос по SMF
Не пишите несколько сообщений подряд - тут вам не Twitter  >:( в остальных ситуациях мы не сильно зверствуем 2funny

artclan.ru

Может мод SmileyLimit на что сгодится и в этом случае?

alex-ergeev

Походу у Макара цель была не помочь с ответом, а запутать вопрос. Аналогичное относится и к остальным участникам обсуждения.

Нашел решение совершенно не тут, но выложу здесь, т.к. именно этот вопрос - пытался сам решить:

ЦитироватьКак запретить повторяющиеся символы в теме? Мне нужно ограничить не кол-во символов в теле сообщения. А только знаков препинания в теме сообщения.

Всего две правки в одном файле: forum/Sources/Display.php

Найти:
censorText($topicinfo['subject']);
Добавить выше:
$topicinfo['subject'] = preg_replace('/([\.,!\?])\1+/', '$1', $topicinfo['subject']);
Найти:
censorText($message['subject']);
Добавить выше:
$message['subject'] = preg_replace('/([\.,!\?])\1+/', '$1', $message['subject']);
За идею спасибо:
http://forum.aeroion.ru/topic566.html
http://www.simplemachines.ru/index.php?topic=14624

Yarik

Цитата: alex-ergeev от 13 декабря 2015, 21:48:58censorText($message['subject']);
Для тела сообщения искать нужно
censorText($message['body']);А вставлять на всем этим лучше всего
$$message['body'] = preg_replace('/([\,])\1+/', '$1', preg_replace('#(\.){3,}#', '\1\1\1', preg_replace('#(\?){3,}#', '\1\1\1', preg_replace('#(\!){3,}#', '\1\1\1', $message['body']))));так как нужны иногда и тройные знаки ? или ! с точками.
По аналогии и все остальное.