Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Вставка url в ответ

Опубликовано:

Доброго времени суток!

При вставке ссылки из буфера обмена в форму ответа и последующей отправки ответа ...

В сообщении криво отображаеться ссылка...

Например: иммеем ссылку вида _http://domain.ru/forum/topic/76643-novyi-forum/?p=1601360

А получаем вот такое преобразование

[url=http://domain.ru/forum/topic/]http://domain.ru/forum/topic/[/url]76643-novyi-forum/?p=1601360

http://domain.ru/forum/topic/76643-novyi-forum/?p=1601360

 

Как починить?

Форум 3.4.5

Спасибо!

Рекомендованные сообщения

Опубликовано:
Обратите внимание

По указанному вами в профиле "Board url" находится не IP.Board, либо модифицированный пиратский скрипт с удаленными копирайтами. Если вы указали неверный URL, пожауйста, поправьте его, потому что он скорее всего потребуется при диагностике вашей проблемы. Нелицензионные скрипты не приветствуются, т.к. зачастую именно некорректное "нуление" и является причиной проблем в них.

Опубликовано:

Как починить?

Написать разработчикам, или же обрамлять ссылку в ббкод url

 

[url]http://domain.ru/forum/topic/76643-novyi-forum/?p=1601360[/url]

Опубликовано:
  • Автор

Написать разработчикам, или же обрамлять ссылку в ббкод url

 

[url]http://domain.ru/forum/topic/76643-novyi-forum/?p=1601360[/url]

Спасибо!

На старой версии 3.1.4 - при вставке просто ссылки в ответ - движок автоматически обрамлял.... а счаз беда...

Опубликовано:

Автоматически никогда ничего не обрамлялось. Просто парсеры стали разными. А виноват во всем все тот же HTMLPurifier

Опубликовано:

Открыть /ips_kernel/htmlpurifier/HTMLPurifier/Injector/Linkify.php

 

Найти регулярку:

#(.*?)(\()?((?:http|ftp|https):\/\/[\p{L}\-_]+(?:\.[\p{L}\-_]+)?(?:[\p{L}\-\.,\(\)@?^=%&:\/~\+\#]*[\p{L}\-\@?^=%&\/~\+\#]))(.*?)$#ims

Заменить на:

#(.*?)(\()?((?:http|ftp|https):\/\/[\p{L}\d\-_]+(?:\.[\p{L}\d\-_]+)?(?:[\p{L}\d\-\.,\(\)@?^=%&:\/~\+\#]*[\p{L}\d\-\@?^=%&\/~\+\#]))(.*?)$#ims

 

Добавился метасимвол \d для захват цифр.

Но еще остается баг, что в одной строке вторая и последующие ссылки не парсятся. Парсится только первая.

Опубликовано:

По хорошему весь их этот код

 

       $uni = (IPS_DOC_CHAR_SET=="UTF-8") ? "u" : "";
       preg_match_all( "#(.*?)(\()?((?:http|ftp|https):\/\/[\p{L}\-_]+(?:\.[\p{L}\-_]+)?(?:[\p{L}\-\.,\(\)@?^=%&:\/~\+\#]*[\p{L}\-\@?^=%&\/~\+\#]))(.*?)$#ims" . $uni, $token->data, $matches );
       //print_r($matches);exit;

       //$token = array();

       // $i = index
       // $c = count
       // $l = is link
       /*for ($i = 0, $c = count($bits), $l = false; $i < $c; $i++, $l = !$l) {
           if (!$l) {
               if ($bits[$i] === '') continue;
               $token[] = new HTMLPurifier_Token_Text($bits[$i]);
           } else {
               $token[] = new HTMLPurifier_Token_Start('a', array('href' => $bits[$i]));
               $token[] = new HTMLPurifier_Token_Text($bits[$i]);
               $token[] = new HTMLPurifier_Token_End('a');
           }
       }*/

       if( is_array($matches) AND count($matches) )
       {	
		$token = array();//by denchu 06062013
           foreach( $matches[0] as $k => $match )
           {
               if( !$matches[3][$k] )
               {
                   $token[]   = new HTMLPurifier_Token_Text($token->data);
               }
               else
               {
                   if( $matches[1][$k] )
                   {
                       $token[] = new HTMLPurifier_Token_Text($matches[1][$k]);
                   }

                   if( $matches[2][$k] )
                   {
                       $token[] = new HTMLPurifier_Token_Text($matches[2][$k]);
                   }

                   if( !$matches[2][$k] AND $matches[4][$k] == ')' )
                   {
                       $matches[3][$k] .= ')';
                       unset($matches[4][$k]);
                   }

                   $token[] = new HTMLPurifier_Token_Start('a', array('href' => $matches[3][$k]));
                   $token[] = new HTMLPurifier_Token_Text($matches[3][$k]);
                   $token[] = new HTMLPurifier_Token_End('a');

                   if( $matches[4][$k] )
                   {
                       $token[] = new HTMLPurifier_Token_Text($matches[4][$k]);
                   }
               }
           }
       }

 

надо заменить на оригинальный, пока не сделают нормальную обработку урлов.

 

       $uni = (IPS_DOC_CHAR_SET=="UTF-8") ? "u" : "";
       $bits = preg_split('#((?:http|ftp|https)://[\p{L}\d\-_]+(?:\.[\p{L}\d\-_]+)?(?:[\p{L}\d\-\.,\(\)@?^=%&:\/~\+\#]*[\p{L}\d\-\@?^=%&\/~\+\#]))#i'.$uni, $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);

       $token = array();

       // $i = index
       // $c = count
       // $l = is link
       for ($i = 0, $c = count($bits), $l = false; $i < $c; $i++, $l = !$l) {
           if (!$l) {
               if ($bits[$i] === '') continue;
               $token[] = new HTMLPurifier_Token_Text($bits[$i]);
           } else {
               $token[] = new HTMLPurifier_Token_Start('a', array('href' => $bits[$i]));
               $token[] = new HTMLPurifier_Token_Text($bits[$i]);
               $token[] = new HTMLPurifier_Token_End('a');
           }
       }

Опубликовано:
  • Автор

Спасибо огромное!!!

Помогло.....

Опубликовано:

По хорошему весь их этот код

надо заменить на оригинальный, пока не сделают нормальную обработку урлов.

Кто имеется в виду под их и что такое оригинальный (чей?). Ничего непонятно.

Опубликовано:

Оригинальный - имеется ввиду оригинальный код из функции HTMLPurifier_Injector_Linkify::handleText() в библиотеки htmlpurifier (сторонняя библиотека которая прикручена к IPB и модифицирована IPS), тот маленький кусочек закаментированого кода. Ладно регулярное выражение то понятно, но зачем заменили preg_split на preg_match_all с которого довольно трудно получить результат соответствующей старой логике - не понятно.

Опубликовано:

Ничего не менял в Linkify.php или где-то еще в лицензионной версии 3.4.5.

 

Ссылка топик стартера нормально парсится:

 

XRHBp.jpg

 

Посмотрю, что у меня в Linkify.php сейчас..

Опубликовано:

У меня стоит строка:

 

#(.*?)(\()?((?:http|ftp|https):\/\/[\w\-_]+(?:\.[\w\-_]+)?(?:[\w\-\.,\(\)@?^=%&:/~\+\#]*[\w\-\@?^=%&/~\+\#]))(.*?)$#ims"

 

У топик стартера локализация от IBR или что-то еще не то?

Опубликовано:
  • Автор

У меня стоит строка:

 

#(.*?)(\()?((?:http|ftp|https):\/\/[\w\-_]+(?:\.[\w\-_]+)?(?:[\w\-\.,\(\)@?^=%&:/~\+\#]*[\w\-\@?^=%&/~\+\#]))(.*?)$#ims"

 

У топик стартера локализация от IBR или что-то еще не то?

 

Залил оригинальный...и все заработало... Еще раз Всем спасибо!!!

Особенно siv1987

 

З.Ы.Версия лицензия 3.4.5 + локализация IBR поверх...

Опубликовано:

Залил оригинальный...и все заработало... Еще раз Всем спасибо!!!

Особенно siv1987

 

З.Ы.Версия лицензия 3.4.5 + локализация IBR поверх...

 

А почему не пишите гневные письма на форуме техподдержки IBR?!

 

И второй вопрос: чем прекрасна локализация, а не просто перевод, которых масса бесплатных и платных? Хотя бы вот на вашем примере?

Опубликовано:

У меня стоит строка:

У топик стартера локализация от IBR или что-то еще не то?

На сколько я вижу идентично, за исключением метасимвола \w который заменен на юникод \p{L}. ИБР-овцы видимо забыли, что в \p{L} числовой класс (0-9) не входит как в случае с \w. За то последний не будет работать с урл-ами в которых есть кириллица в utf-8 с не правильно установленной локалью. Можно заменить \p{L} на \w, можно после добавить 0-9, это не столь важно, все равно несовместимость несколько ссылок в одной строке остается. Попробуйте разместить две-три ссылки в одной строке без перевода строк, и несколько ссылок каждая с новой строки.

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.