Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
asterix_kpi

Вставка 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 для захват цифр.

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

  • Upvote 4

Поделиться сообщением


Ссылка на сообщение

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

 

       $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');
           }
       }

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

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

Поделиться сообщением


Ссылка на сообщение

Оригинальный - имеется ввиду оригинальный код из функции 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?!

 

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

Поделиться сообщением


Ссылка на сообщение

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

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

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

×
×
  • Создать...