Разница обработки BB тегов IMG и URL

TorSav

Пользователь
Версия TP
иная
После того, как вчера Беломохорочка (наш любимчик), осуществил мою мечту в теме: https://torrentpier.com/threads/bb-code-redaktor-kak-sdelat-ssylku-bez-domena.42306/ Я продолжил возится со своим сайтом. Но тут появилась одна хитрость.
Раньше я размещал скриншоты под спойлером просто в тегах img. На разных торент трекерах, владельцы, любят иметь каждых свой вид названий тем. Я выбрал с квадратными скобками. Далее, что бы особо не мудрить с именами папок и фотохостингами. Просто закидывал папки с фотками, с именами тем на форуме, себе на сайт (естественно с квадратными скобками). И все работало хорошо.

Потом я решил создать новую раздачу с фотками. Для этого под спойлером нужно было уже размещать не криншоты, а кликабельное превью. Для этого использовал код:
Код:
[url=ссылка_[на]_фото][img]ссылка_[на]_превью[/img][/url]
После чего ссылка после сохранения сообщения, обрезалась до вида:
Код:
ссылка_[на
PHP:
// [url]
        $url_exp = '[\w\#!$%&~/.\-;:=,?@а-яА-Я()\[\]+]+?';
        $text = preg_replace_callback("#\[url\]((?:https?://)?$url_exp)\[/url\]#isu", [&$this, 'url_callback'], $text);
        $text = preg_replace_callback("#\[url\](www\.$url_exp)\[/url\]#isu", [&$this, 'url_callback'], $text);
        $text = preg_replace_callback("#\[url=((?:https?://)?$url_exp)\]([^?\n\t].*?)\[/url\]#isu", [&$this, 'url_callback'], $text);
        $text = preg_replace_callback("#\[url=(www\.$url_exp)\]([^?\n\t].*?)\[/url\]#isu", [&$this, 'url_callback'], $text);

Please Login or Register to view hidden text.



Please Login or Register to view hidden text.



Please Login or Register to view hidden text.



Please Login or Register to view hidden text.



Please Login or Register to view hidden text.



Please Login or Register to view hidden text.



Please Login or Register to view hidden text.



Please Login or Register to view hidden text.



Please Login or Register to view hidden text.



Please Login or Register to view hidden text.

 
Последнее редактирование:

TorSav

Пользователь
В общем подумал, что кому то пригодится:
PHP:
        $text = preg_replace_callback("#\[url=\"((?:https?://)?$url_exp)\"\]([^?\n\t].*?)\[/url\]#isu", [&$this, 'url_callback'], $text);
        $text = preg_replace_callback("#\[url=\"(www\.$url_exp)\"\]([^?\n\t].*?)\[/url\]#isu", [&$this, 'url_callback'], $text);
Файл: src/Legacy/BBCode.php. Жалко тема перестала редактироваться. 15 минут мне оказалось мало. А там еще и все попереехало в ссылки чего то. А чего, уже не понять мне.
 

belomaxorka

Разработчик
Администратор
В принципе, в том что регулярные выражения не самые продуманные в классе BBCode - я не сомневаюсь.

Поэтому да, найденные проблемы вполне обоснованы, можно отнести к багам) Если такой фокус провернуть с каждым тегом, то абсолютно все поломаются) причем уверен что сломать так тег можно в любом движке / редакторе, это лишь вопрос желания. А так, даже самая хорошая регулярка скорее всего не покроет даже 99% вариантов использования тега, поэтому, даже не знаю стоит ли стараться усложнять регулярные выражения, или может найти какой-то более комплексный подход или вообще замену BBCode редактору в пользу того же WYSIWYG.
 
Последнее редактирование:

sхс

Легенда
Если честно вообще и никогда не возникал вопрос использования относительных путей в ссылках, т.к большинстов ссылок копируются из адресной строки. Больше вопросов было о http или https, подумывал заменить это на
Код:
[url=//site.ru]ссылка[/url\]

Единственное удобство, что недавно заметил на рутрекере, при клике по URL кнопке в редакторе появляется
Код:
[url=][/url]
вместо
Код:
[url][/url]
 

sхс

Легенда

Please Login or Register to view hidden text.



Please Login or Register to view hidden text.

Дружище, я не зря тебе отправлял ссылки в прошлый раз. Обязательно изучи матчасть и всё прояснится сразу. Я так тоже методом тыка пару лет пылася что-то делать.... ( я создавал пару лет сайты без знания в программировании, а после изучения php, js, regexp и прочего следующие пару лет их полностью переделывал)

Изучи синтаксис regexp, служебные симолы типа [ ] надо обязательно экранировать

Тренируйся в песочнице. Я тебе создал пример по ссылке

Please Login or Register to view hidden text.


//
Наличие символа ] внутри
Код:
[url=]
- это проблема
 
Последнее редактирование:

belomaxorka

Разработчик
Администратор
Единственное удобство, что недавно заметил на рутрекере, при клике по URL кнопке в редакторе появляется
Код:
[url=][/url]
вместо
Код:
[url][/url]
Такое добавить достаточно просто из коробки. Стоит ли? Что скажешь?
 

sхс

Легенда
Такое добавить достаточно просто из коробки. Стоит ли? Что скажешь?
Просто, но рядовой пользователь не знает что такое bbcode и в некоторых случаях он может сотворить такое
Код:
[url=]http://site.ru[/url]
или эдакое
Код:
[url=]текст[/url]
Я за то чтобы сделать как в xenforo - всплывающее окошко

В последнее время стараюсь все переводить на ajax и user friendly
 
Последнее редактирование:

belomaxorka

Разработчик
Администратор
Просто, но рядовой пользователь не знает что такое bbcode и в некоторых случаях он может сотворить такое
Код:
[url=]http://site.ru[/url]
или эдакое
Код:
[url=]текст[/url]
Я за то чтобы сделать как в xenforo - всплывающее окошко

В последнее время стараюсь все переводить на ajax и user friendly
И то верно. Именно страх что для конечного пользователя что-то будет не очевидно - останавливает меня делать какие-либо крупные изменения по части использования. У нас итак весь движок по сути не очевидный для мигранта с DLE например, или вообще новичка.

Есть много планов которые я потихоньку реализую, именно в сторону улучшения удобства/установки.
 

sхс

Легенда
Я начинал с DLE и мне очень приглянулся torrentpier из-за простоты кода. Но после добавления \library\Zend и ООП жизнь новичиков усложнилась :)

Интересно, какая часть \library\Zend вообще используется в движке? Я топил за то чтоб пилились свои классы и функции (с элементами воровства).

После обновления структуры старички остались без модов и обнов.

Лично меня (как вечного новичка) пугает огромная череда наследований в коде.... А если слышу про инкапсуляцию и полиморфизм, то всё, удаляю эту cms/framework :LOL:
 
Последнее редактирование:
Сверху