|
Поделиться

[ALFA] magic url patch

Для тестирования - из этого, возможно, получится мод... А может и не получится)

Хаки, скрипты, BB-коды и другие вещи, не оформленные в виде полноценных модов, но способствующие улучшению функциональности движка.

Сообщение c61 » 14.03.14 19:34

В phpbb есть известная проблема преобразования url, когда в сообщении присутствует ссылка без обрамления ББ-кодом url.

Если ссылка идёт первой строкой в quote или когда она внутри бб-кода (например, size), то ссылка не становится "кликабельной". Для решения проблемы приходится создавать пустую строку или добавлять пробел перед ссылкой.

Примеры "некликабельных" ссылок (если патч не применен):
Код: Выделить всё
[quote]http://google.com - погугли ![/quote]
Код: Выделить всё
[color=#BF0000]http://c61.no-ip.org [/color]

Расследование показало, что в парсере сообщений есть обработчик - функция magic_url, которая отвечает за "магические url", как следует из её имени. В этой функции вызывается функция make_clickable из includes/functions_content.php.

Для исправления предлагается следующий патч:

1) В файле includes/functions_content.php найти (фрагменты строк, подлежащие замене, встречаются дважды):
Код: Выделить всё
(^|[\n\t (>.])
и ЗАМЕНИТЬ везде на
Код: Выделить всё
(^|[\n\t (\]>.])

затем найти (встречается дважды)
Код: Выделить всё
(^|[\n\t (>])
и ЗАМЕНИТЬ везде на
Код: Выделить всё
(^|[\n\t (\]>])

2) Очистить кэш.

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

В сообщениях, размещённых до применения патча, "некликабельные" ссылки таковыми и остаются до тех пор, пока не будет проведён репарсинг (что происходит, например, если открыть сообщение для редактирования, изменить хотя бы один символ и отправить заново).

Прошу всех заинтересованных протестировать. Слабо верится, что исправление сильно надоевшей проблемы столь простое и что разработчики phpbb настолько ленивы... Наверняка есть подводные камни ;)
Аватара пользователя
c61
Разработчик модов
 
Сообщения: 249
Зарегистрирован: 24.08.13 16:46

Сообщение Shredder » 14.03.14 23:02

Перенёс тему в "Расширение возможностей phpBB3", т.к. к модам пока что она отношения не имеет.

c61 писал(а):В сообщениях, размещённых до применения патча, "некликабельные" ссылки таковыми и остаются до тех пор, пока не будет проведён репарсинг (что происходит, например, если открыть сообщение для редактирования и отправить заново).

Забыл ещё добавить, что текст сообщения перед отправкой нужно изменить - хотя бы на 1 символ, но чтобы текст отличался. Иначе вытащит из "кеша" и ссылки останутся некликабельными всё равно.

c61 писал(а):Слабо верится, что [...]

Мне тоже слабо верится. Хотя возможно всякое...

Если "на первый взгляд" отклонений не наблюдается, то варианта 2:
1) Поставить на какой-нибудь высокопосещаемый и активный форум, попросив пользователей и всех остальных последить.
2) Найти тему с обсуждением этого бага самими разработчиками и посмотреть на предложенные там идеи. Возможно, эта идея уже была кем-то обработана и выявлена её непригодность. Если нет, то она может претендовать на реальный патч против этой фигни. К слову, "разработчики" этого phpBB - люди довольно безынициативные и ленивые, поэтому могли не заметить решения у себя под носом. Хорошо помню, как один чувак из их числа в ответ на моё предложение сделать загрузку вложения по ссылке ответил что-то в духе "это довольно сложная вещь, поэтому отложим до какого-то там phpBB 3.2". Потом оказалось, что мод на самом деле элементарный, с той лишь оговоркой, что загружаться будут только те файлы, в ссылках на которые явно присутствует расширение файла, да и то - из-за дурацкой перемудрёной "системы безопасности" phpBB. Можно, скажем, сделать загрузку по cUrl, как это почти сделано в моде по запрещению ссылок на картинки с посторонних сайтов. И наверняка это не единственный вариант.

Добавлено позже:
Указанные тобой вхождения встречаются в файле по 2 раза. Заменять все? Заменил все, начал тестировать, сразу получил баг:

magic_url_bug.png


Естественно, подпись я в цитату не добавлял.
Возможно, что проблема только на этом форуме из-за несовместимости с каким-нибудь модом.

Добавлено позже:
Как я и думал, проблема оказалась в добавлении символов \p{P} в патче для русских ссылок. Убрал все эти добавки \p{P} нафиг, раз от них столько проблем. Патч потестировал, других проблем пока не заметил.
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 867
Зарегистрирован: 22.08.13 09:05

Сообщение c61 » 15.03.14 07:35

Shredder писал(а):текст сообщения перед отправкой нужно изменить - хотя бы на 1 символ
Thnks, исправил.
Shredder писал(а):вхождения встречаются в файле по 2 раза. Заменять все?
Тоже исправил.
Shredder писал(а):К слову, "разработчики" этого phpBB - люди довольно безынициативные и ленивые, поэтому могли не заметить решения у себя под носом.
Да, много раз замечал такое, это одна из причин, почему ничего не публикую на ресурсах разработчиков.
Shredder писал(а):Как я и думал, проблема оказалась в добавлении символов \p{P} в патче для русских ссылок. Убрал все эти добавки \p{P} нафиг, раз от них столько проблем.
Интересная тема. Когда-то давно читал, но не дочитал. Поковыряюсь.
Аватара пользователя
c61
Разработчик модов
 
Сообщения: 249
Зарегистрирован: 24.08.13 16:46

Сообщение Shredder » 15.03.14 07:54

c61 писал(а):Интересная тема. Когда-то давно читал, но не дочитал. Поковыряюсь.

У меня уже есть теория, как исправить работу мода "Non Latin Symbols" при наличии \p{P} :

Проблема первая: при парсинге URL разрушаются теги bb-кодов, если ссылка стоит вплотную к концу закрывающего тега. Пример:
Код: Выделить всё
[quote]http://www.phpbb-work.ru/[/quote]

Возможное решение: исключить из регулярного выражения "магических ссылок" добавку в ссылку последовательности двух символов [/ , характерных для закрывающего тега bb-кода, если таковая найдена в тексте "магической ссылки".

Проблема вторая: если в самом конце ссылки найден символ закрывающей круглой скобки ), вплотную прилегающий к ссылке, то эта скобка добавляется в ссылку, и в результате ссылка ведёт "не туда". Пример в этом сообщении. Что интересно - если в самом начале ссылки находится открывающая круглая скобка ( , то она в ссылку не преобразуется, как и должно быть.

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

Но нужно пробовать на практике, получится всё это или нет.
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 867
Зарегистрирован: 22.08.13 09:05

Сообщение c61 » 15.03.14 08:39

Shredder писал(а):У меня уже есть теория..
Загляни сюда http://c61.no-ip.org/forum/viewtopic.php?p=210#p210
Пока не поборол только "!" в конце ссылки. Без \p, достаточно дополнить условия поиска (включая символы utf-8, заданные напрямую) и сохранить functions.php в utf-8.
Аватара пользователя
c61
Разработчик модов
 
Сообщения: 249
Зарегистрирован: 24.08.13 16:46

Сообщение Shredder » 15.03.14 08:55

Хм, да там ещё и восклицание в ссылках есть... "Как все запущено".
Интересно, есть хоть какие-то символы, которые википедия не использует в собственных ссылках?
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 867
Зарегистрирован: 22.08.13 09:05

Сообщение c61 » 15.03.14 08:58

Интересно, есть хоть какие-то символы, которые википедия не использует в собственных ссылках?
Похоже на то, что нет :lol:

Добавлено спустя 3 минуты 44 секунды:
Итак, проблемных символа в коные ссылки обнаружено всего два: "!" и ".", с остальными OK.

Добавлено спустя 21 минуту 16 секунд:
Да, \pP и \pS всё-таки приходится использовать, но в одном определённом месте, теперь патч "гвозди жуёт". А вот с поблемными "!" и "." пока никак...

Добавлено спустя 11 минут 6 секунд:
Обнаружил ещё проблемные символы конца ссылки. Полный список: ".", ",", "!", "?", ":", """.

Добавлено спустя 4 часа 24 минуты 15 секунд:
См. патч в теме мода hook_urlname.

Тему можно закрыть.
Аватара пользователя
c61
Разработчик модов
 
Сообщения: 249
Зарегистрирован: 24.08.13 16:46

Сообщение Shredder » 17.03.14 00:47

c61 писал(а):Тему можно закрыть.

Думаю, что патч нужно сделать отдельной темой, потому что:
1) Это другой "мод", отличный от преобразования нелатинских символов в ссылки и от автопреобразования ссылок в их имена. Должно быть так: одна функция - одна тема - один мод.
2) В теме хука для преобразования ссылок в имена ты скрестил мод для преобразования нелатинских символов с magic url patch , но там даны лишь 3 из 4-х нужных замен.
И самое главное:
3) Если этот ALPHA патч работает (а пока я вижу, что это так), то нужно непременно сообщить разработчикам движка. Может, они внесут его в phpBB.
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 867
Зарегистрирован: 22.08.13 09:05

Сообщение c61 » 17.03.14 01:09

Shredder писал(а):...патч нужно сделать отдельной темой

Да, планировал после завершения отладки hook_urlname. Мод, однако, является развитием мода Non-latin Symbols in URL. Согласен, что поскольку новый мод относится не только к ссылкам, возможно, это и будет новый мод с новым названием)) Давай поразмыслим, как его обозвать.
Shredder писал(а):2)...скрестил мод...
Да, четвертую чуть позже добавлю. Если смогу победить адреса электронной почты в кириллических доменах. Хотя склоняюсь к тому, что это пока бессмысленно. И в обозримом будущем не понадобится.
Shredder писал(а):3)...нужно непременно сообщить разработчикам движка
Сомневаюсь, что они его внесут в phpBB... Будут два года обсуждать)) Странно также, что до нас никто этим не озаботился, или нам это неизвестно.

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

По патчам phpbb - даже думаю создать темку, где будут перечислены необходимые патчи и моды, без которых phpbb "из коробки" неудобен или нефункционален. Возможно, стоит сделать автомод для установки "в один клик" минимального "джентельменского набора")
Аватара пользователя
c61
Разработчик модов
 
Сообщения: 249
Зарегистрирован: 24.08.13 16:46

Сообщение Shredder » 17.03.14 01:15

c61 писал(а):Давай поразмыслим, как его обозвать.

А чем настоящее название мода плохо? Хорошее звучное название: magic url patch.

c61 писал(а):Сомневаюсь, что они его внесут в phpBB...

Я тоже сомневаюсь. Но попытка - не пытка. Как-нибудь попробую, если не забуду)

Перечислить в одной теме всё необходимое для парсинга ссылок - я тоже об этом думал. Или даже создать новый мод с новым названием для этих целей, собрав его под UMIL и Автомод.
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 867
Зарегистрирован: 22.08.13 09:05

Сообщение Shredder » 18.02.16 07:56

А если на форуме есть бб-код [video], внутри которого необходимо именно отсутствие преобразования, то как это обойти?
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 867
Зарегистрирован: 22.08.13 09:05

Сообщение c61 » 18.02.16 08:26

Наверно, стоит добавить к исключениям тэг object. Заодно и фреймы (iframe, frame) на всякий случай )
Аватара пользователя
c61
Разработчик модов
 
Сообщения: 249
Зарегистрирован: 24.08.13 16:46

Сообщение Sumanai » 22.02.16 23:39

Shredder писал(а):А если на форуме есть бб-код [video], внутри которого необходимо именно отсутствие преобразования

Вот поэтому данная особенность является не багом, а фичей.
Sumanai
 
Сообщения: 28
Зарегистрирован: 05.12.15 20:47


Вернуться в Расширение возможностей phpBB 3.0.x

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1