Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Strategius

Минимальное количество символов в сообщении

Recommended Posts

Здравствуйте. Перечитал все подобные темы, никак не могу настроить минимальное количество символов для отправки сообщения (и новых тем), для борьбы с мелким спамом.

 

Метод отсюда - http://ipbskins.ru/forum/blog/69/entry-180-минимальная-длина-сообщений-в-ipboard-3х/ почему-то не работает вообще на версии 3.4.9.

 

Также есть хук (FC33) Minimum Character Limit, но он работает тоже как-то странно, то ограничивает отправку коротких сообщений, то нет. Точно не ограничивает, если отправить несколько сообщений подряд...

 

P.S. - где-то уже вроде отписывались по проблемам с этим хукам, но к сожалению не смог найти эту тему.

 

Не подскажите, пожалуйста, в чем там проблема? Хук прикрепляю. Заранее огромное спасибо

(FC33) Minimum Character Limit.xml

Share this post


Link to post
Share on other sites

Метод отсюда - http://ipbskins.ru/f...й-в-ipboard-3х/ почему-то не работает вообще на версии 3.4.9.

В 3.1 редактор другой.

В 3.4 пост идет с тегами. Если Вы отправляете символ a (англ.), то пост будет

<p>a</p>

. А значение выражения (strlen( trim( IPSText::removeControlCharacters( IPSText::br2nl( $post['post'] ) ) ) )) будет равна 8. Если Вы отправите а (русс), то значение будет 9.

Используйте mb_strlen() или IPSText::mbstrlen(). Для удаления тегов - strip_tags() или IPSText::stripTags()

  • Upvote 1

Share this post


Link to post
Share on other sites

Странно, если поменять оригинальную строку

 

if ( strlen( trim( IPSText::removeControlCharacters( IPSText::br2nl( $post['post'] ) ) ) ) < 1 AND !$this->getIsPreview() )

На

 

if ( mb_strlen( trim( IPSText::removeControlCharacters( IPSText::br2nl( $post['post'] ) ) ) ) < 10 AND !$this->getIsPreview() )

То вообще нет изменений. А если поменять на то:

 

if ( strip_tags( trim( IPSText::removeControlCharacters( IPSText::br2nl( $post['post'] ) ) ) ) < 10 AND !$this->getIsPreview() )

То сообщение вообще не отправляется с любым кол-вом символов...

Share this post


Link to post
Share on other sites

В первом случае Вы получаете значение (кол-во) вместе с тегами.

Во втором - строку, из которой удалены теги.

 

Нужно совместить.

  • Upvote 1

Share this post


Link to post
Share on other sites

@newbie, огромное спасибо за подсказку!

 

Для 3.4.x

 

admin\applications\forums\sources\classes\post\classPost.php

 

Найти (3 раза):

 

strlen( trim( IPSText::removeControlCharacters( IPSText::br2nl( $post['post'] ) ) ) ) < 1

Заменить на:

 

mb_strlen( strip_tags ( trim( IPSText::removeControlCharacters( IPSText::br2nl( $post['post'] ) ) ) ) ) < 10

< 10 - минимальная длина сообщений в символах.

Edited by Strategius

Share this post


Link to post
Share on other sites

Есть в этом один интересный нюанс - если вставить смайлик, то ограничение на кол-во символов оно не влияет. Поставь хоть ограничение в сто символов, смайлик проходит без проблем.

Share this post


Link to post
Share on other sites

Есть в этом один интересный нюанс - если вставить смайлик, то ограничение на кол-во символов оно не влияет. Поставь хоть ограничение в сто символов, смайлик проходит без проблем

Как так?

У Вас 3.1.4. Проверил. Смайлы не проходят.

Смайл - тег img. А мы теги вырезаем strip_tags.

Share this post


Link to post
Share on other sites
Смайлы не проходят

В 3.4 проходят как ни странно...

Share this post


Link to post
Share on other sites

У Вас 3.1.4. Проверил. Смайлы не проходят.

Смайл - тег img. А мы теги вырезаем strip_tags.

Хм... Может это ещё зависит от каких либо настроек?

 

Все остальные символы, и бб-коды и html-код - не проходит.

Share this post


Link to post
Share on other sites

Сделайте var_dump( mb_strlen( strip_tags ( trim( IPSText::removeControlCharacters( IPSText::br2nl( $post['post'] ) ) ) ) ) ); exit;

и посмотрите что содержит очищенная строка.

Share this post


Link to post
Share on other sites

var_dump( mb_strlen( strip_tags ( trim( IPSText::removeControlCharacters( IPSText::br2nl( $post['post'] ) ) ) ) ) ); exit;

Это поставить вместо чего?

Share this post


Link to post
Share on other sites
Это поставить вместо чего?

Перед условием.

Share this post


Link to post
Share on other sites

Перед условием.

Выдаёт int(число символов напечатанных в форму)

 

А вот если смайл вписать, то выдаёт - int(0)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...