Undertaker
5.07.2013 - 11:25
Есть ли какая нибудь функция в php которая могла бы перевести заглавные буквы в строчные, но с сохранением первой буквы если она заглавная. Например: "У МеРи БыЛ ЯгНёНоК" преобразовать в "У Мери Был Ягнёнок", "У МЕРИ БЫЛ ЯГНЁНОК" преобразовать в "У Мери Был Ягнёнок", но "У Мери был ягнёнок" оставить как есть. Т.е. такая своеобразная защита если не первый символ заглавный-преобразовать в строчную.
_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
ucfirst -
http://www.php.net/manual/en/function.ucfirst.php
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Undertaker
5.07.2013 - 11:37
T1grOK
Это первый символ, а если в строке встретиться имя, например, его бы надо оставить как есть "У Мери был ягнёнок"... ucfirst же как утверждает мануал сделает его "У мери был ягнёнок" , обидно за Мери)))
_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
DedMorozzz
5.07.2013 - 11:44
много обработки надо делать
Если быстро и сразу, то можно или всё с маленькой буквы или 1я буква каждого слова с большой
Иначе делать анализ каждого слова, с какого регистра начинается и на основании этого делать преобразование или не делать
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Undertaker
5.07.2013 - 11:54
DedMorozzz
Ну я предполагал это, полагал что может найдётся какая нибудь подобная команда) Но видимо не судьба, ладненько, спасибо за помощь
_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
Undertaker
5.07.2013 - 11:57
DedMorozzz
А можно ли как то проверить фразу в нижнем регистре и если встречается мат, заменить на смайлик, а остальное оставить как было?
_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
Placido
5.07.2013 - 12:05
Можно сделать с помощью регулярных выражений. Что-то типа
$str = 'У Мери БыЛ ЯгНЕноК, у МЕРИ Был ЯГНЕноК';
echo preg_replace_callback('/(?<=(?i:[а-яё]))([А-ЯЁ]+)/u', function($match){return mb_strtolower($match[1]);}, $str);
DedMorozzz
5.07.2013 - 12:16
Это не убирает обработку каждого слова + проверка посимвольная ещё(просмотр назад для каждого символа)
Но даже это - запусти на текст из 1000 слов. Представляешь какой объём обрабатывать?
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Placido
5.07.2013 - 12:24
Цитата (DedMorozzz @ 5.07.2013 - 11:16) |
Это не убирает обработку каждого слова + проверка посимвольная ещё(просмотр назад для каждого символа)
Но даже это - запусти на текст из 1000 слов. Представляешь какой объём обрабатывать? |
Текст из 64000 слов (полмиллиона знаков), время обработки - 0,26 сек.
DedMorozzz
5.07.2013 - 12:33
это много, особено учитывая, что ты обрабатываешь сам у себя и 1 запрос.
А если будет поболее нагрузка?
Но так или иначе - как уже выше было заказано: "решить задачу можно анализом каждого слова". Решение предоставил, но у себя я бы его не использовал.
Уж слишком оно тяжелое - посимвольный анализ. Причём без учёта англ языка. Добавь его - ещё дольше будет выполнятся, ибо увеличится область сравнения
PS: если бы решения "неугодных слов" и типов речи были бы просты - они стояли бы на каждом сайте. Начиная антиматом, заканчивая транслитом.
Но в конечном итоге или такие решения недействительные или ресурсов жрут больше, чем ожидаемая польза
По этому проще создать правила, в которых будет указано, что нельзя, чем заниматся криптографией
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Placido
5.07.2013 - 12:40
Это не много, учитывая, что запрос на полмиллиона знаков. Если такая защита нужна, например, для проверки комментариев в гостевой книге или на форуме, то вполне подойдет. Не думаю, что на каком-то форуме разрешены комментарии, содержащие миллионы знаков.
P.S.
Цитата |
По этому проще создать правила, в которых будет указано, что нельзя, чем заниматся криптографией |
С этим согласен. Решение дал под поставленную ТС-ом задачу, но у себя бы такое не использовал.
DedMorozzz
5.07.2013 - 12:57
Цитата (Placido @ 5.07.2013 - 11:40) |
Не думаю, что на каком-то форуме разрешены комментарии, содержащие миллионы знаков. |
Да далеко ходит на надо. На этом форуме можно создать сообщение весящее порядка 10мегабайт
Цитата (Placido @ 5.07.2013 - 11:40) |
Это не много, учитывая, что запрос на полмиллиона знаков |
Тут снова такой момент, правильно сказал насчёт гостевой книги, где 2 посетителя в неделю, но если взять чуть больше нагрузку, это уже будет большая проблема. Даже очень большая
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
BydloCoder
6.07.2013 - 14:33
ТС, а как быть с аббревиатурами навроде ВоГТУ? Существует слишком много исключений, которые нужно учитывать. Легче пользователей научить адекватно писать сообщения (например, можно оргнизовать небольшой тест по оформлению постов, как на хабре), чем заниматься такими вещами. Хотя, с технической точки зрения это интересно, конечно.
foxiSfox
24.07.2013 - 17:40
Цитата |
Это много, особено учитывая, что ты обрабатываешь сам у себя и 1 запрос. |
А если бы была нативная функция php, думаете она бы не подразумевала обработку каждого слова, что бы перевести его первый символ в верхний регистр?
Можно так:
$str = "у мерри был ягНенок";
$arSrt = explode(" ",$str);
foreach($arSrt as $key=>$word)
$arSrt[$key] = ucfirst($word);
$str = implode(" ", $arSrt);
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.