проблемы с заглавными буквами.

Жалобы, предложения, пожелания.

Модератор: Duncon

BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

19 июн 2007, 17:56

Будет будет
Аватара пользователя
Oscar
Сообщения: 958
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

22 июн 2007, 17:07

Ребята, у вас кофе ещё не закончился? ;)

Закономерность:
1. в сообщении нет ни одного латинского символа в нижнем регистре
2. длина эффективного сообщения (буквы, цифры и пробельные символы) больше 13-ти символов

Почему? Смотрим исходники этих умников из Jelsoft_a :

[syntax="php"]// ###################### Start stopshouting #######################
function fetch_no_shouting_text($text)
{

// ... cut

// we only actually touch a-z with vbstrtolower()
$effective_string = preg_replace('#[^a-z0-9\s]#i', '', $text);

// ... cut

if ($vbulletin->options['stopshouting'] AND vbstrlen($effective_string) >= $vbulletin->options['stopshouting'] AND $effective_string == strtoupper($effective_string))
{
return vbucwords(vbstrtolower($text));
}
// ... cut[/syntax]

Первым делом вырезаются все символы, кроме латинских букв, цифр и пробельных символов, так что всё остальное вообще никак на проблему не влияет,

а далее проверяется включена ли в форуме опция принудительного "отключения" КАПС-ЛОК, причём опция эта проверяется только начиная с заданной длины сообщения.

Почему 13 ? Наверное Aik так поставил.
Почему я решил, что 13 ?

Смотрим на два сообщения от BBB :
. Абвг дежзикл
. абвг дежз икл

Разница всего лишь в одном пробеле и уже не работает.
Так же это обьясняет, почему тест от Хыиуду тоже сработал нормально.

(
реально может быть не 13, а 52,
но для кириллицы должно быть 13.
52 может быть потому, что кирилличная буква представляется как а
и после "обрезания" получается в 4-ре раза "толще"
)


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

Поскольку если такового нет, то последний предикат условия вырождается в :

"123 456" == strtoupper("123 456")
что есть всегда TRUE

Ну и далее происходит нечто забавное ))

vbstrtolower - это локализированная ф-ция, которая действительно преобразует и кирилличные буквы в нижний регистр,

а вот vbucwords - нет :confused:

[syntax="php"]/**
* Capitalizes the first letter of each word, provided it is within a-z.
* Ignores locales.
*/
function vbucwords($text) {
// ... cut[/syntax]

----------------------

Вот такие вот дела, ребятушки.
Так что, Уважаемые Админы, вырубите нафик, пожалуйста, эту опцию :D
Всё равно она не спасёт от сообщения: HHHHHHHHHHHHHHHHHHHHHHelp !!!!!
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

22 июн 2007, 22:04

Ну без сорцов конечно никак, thanks 2 Oscar за проявленую инициативу
It's a long way to the top if you wanna rock'n'roll
Ответить