Спецсимволы и автоцензор.
-
- Former team member
- Сообщения: 1139
- Стаж: 19 лет 2 месяца
- Откуда: Ленинград
-
- phpBB 1.2.1
- Сообщения: 25
- Стаж: 18 лет 9 месяцев
-
- Former team member
- Сообщения: 1139
- Стаж: 19 лет 2 месяца
- Откуда: Ленинград
Это поведение об'ясняется следующей строкой из функции оbtain_word_listUlfr писал(а):буквенно-цифровые сочетания он меняет прекрасно, и русские и английские, а эти не хочет...
Код: Выделить всё
$orig_word[] = '#\b(' . str_replace('\*', '\w*?', preg_quote($row['word'], '#')) . ')\b#i';
Добавлено спустя 1 минуту 45 секунд:
А символы типа "-" не являются для регекспов алфавитно-цифровыми и не означают границу слова. Потому их как "слово в тексте" php их и не находит.
Добавлено спустя 1 минуту 39 секунд:
Можете у себя в этой функции (прописана в includes/functions.php) на время выкинуть оба \b -- и вы прекрасно увидите свои замены.
И если я неправ, пусть старшие товарищи поправят меня
-
- phpBB 1.2.1
- Сообщения: 25
- Стаж: 18 лет 9 месяцев
-
- phpBB 1.2.1
- Сообщения: 21
- Стаж: 20 лет 1 месяц
Подскажите где подправить автоцензор (НЕ про руссский язык)
Подскажите пожалуйста, где можно подправить автоцензор, чтобы он заменял не все слово целиком, а только ЧАСТЬ слова. Покопалась в скриптах - не нашла где это сделать
(( Нужно только в тексте сообщения (в других местах он у меня совсем отключен). Чтобы он не трогал окончания слов 


-
- Former team member
- Сообщения: 1139
- Стаж: 19 лет 2 месяца
- Откуда: Ленинград
http://phpbbguru.net/community/viewtopi ... 255#104255
там я об'яснил, где и почему сделано так, как сделано, как изменить и что из этого получится.
там я об'яснил, где и почему сделано так, как сделано, как изменить и что из этого получится.
И если я неправ, пусть старшие товарищи поправят меня
-
- phpBB 1.2.1
- Сообщения: 21
- Стаж: 20 лет 1 месяц
Т.е., если я правильно поняла, то нужно просто убрать \b в начале или в конце, чтобы автоцензор заработал только на начальную или конечную часть слова, так?
Что из этого может получиться - и примерно осознаю, но у меня будет на форуме специфический словарь терминов и думаю, что проблем особых быть не должно... в крайнем случае - подумаю как их решить (возможно можно будет \b задавать в каждой переменной отдельно, если будет в этом необходимость?) или использовать еще какой-либо спецсимвол...
Что из этого может получиться - и примерно осознаю, но у меня будет на форуме специфический словарь терминов и думаю, что проблем особых быть не должно... в крайнем случае - подумаю как их решить (возможно можно будет \b задавать в каждой переменной отдельно, если будет в этом необходимость?) или использовать еще какой-либо спецсимвол...
-
- Former team member
- Сообщения: 1139
- Стаж: 19 лет 2 месяца
- Откуда: Ленинград
Чтобы ему не нужно было для исправления (изменения) слово, а годилась бы любая часть потока символов.Feeling писал(а):Т.е., если я правильно поняла, то нужно просто убрать \b в начале или в конце, чтобы автоцензор заработал только на начальную или конечную часть слова, так?
И если я неправ, пусть старшие товарищи поправят меня
-
- phpBB 1.2.1
- Сообщения: 21
- Стаж: 20 лет 1 месяц
Спасибо за наводку! Покопалась в документациях и разобралась как все это работает. Раньше было понятно, что для чего-то /b на концах слова прибавляется, но не совсем было понятно, что это спецсимвол.
Расскажу для тех, кому интересно, что я с этим сделала (мало ли вдруг кому понадобится):
В ключевые слова, которые нужно склонять я добавляю в конец символ "%", а потом уже скрипт проверяет и обрабатывает слово в зависимости от того - есть там этот символ или нет. По умолчанию обрабатывается как и раньше, чтобы при апгрейдах форума косяков не повылазило.
З.Ы. Правда в тех случаях, когда слово может использоваться с окончанием или без - приходится в словарь вбивать два варианта (например - "администратор" и "администратор%"), т.к. если окончание у слова отсутствует и в конце строки стоит "\B" - автоцензор этого не понимает.
Хотя мне и в этом случае уж лучше два раза слово вбить, чем 5-10 его различных написаний - всяко экономия.
Расскажу для тех, кому интересно, что я с этим сделала (мало ли вдруг кому понадобится):
Код: Выделить всё
if ( preg_match ('/^\S*\%$/', $row['word'] ) ) {
$row['word'] = str_replace("%", "", $row['word']);
$orig_word[] = '#\b(' . str_replace('\*', '\w*?', preg_quote($row['word'], '#')) . ')\B#i';
} else {
$orig_word[] = '#\b(' . str_replace('\*', '\w*?', preg_quote($row['word'], '#')) . ')\b#i';
}
З.Ы. Правда в тех случаях, когда слово может использоваться с окончанием или без - приходится в словарь вбивать два варианта (например - "администратор" и "администратор%"), т.к. если окончание у слова отсутствует и в конце строки стоит "\B" - автоцензор этого не понимает.

-
- phpBB 1.4.0
- Сообщения: 36
- Стаж: 18 лет 2 месяца
- Откуда: Ярославль
-
- Former team member
- Сообщения: 1139
- Стаж: 19 лет 2 месяца
- Откуда: Ленинград
Вы предлагаете мне еще раз написать то, что я уже написал? Так если вы не хотите читать, вам это не поможет все равно... Feeling почему-то помогло с первого раза.siemens-klub писал(а):а $ на $$заменить нуна.как чтоб без косяков?у меня не получилось..
И если я неправ, пусть старшие товарищи поправят меня