Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
asterix_kpi

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

Recommended Posts

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

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

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

Например: иммеем ссылку вида _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

Спасибо!

Share this post


Link to post
Share on other sites
Обратите внимание

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

Спасибо!

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Открыть /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

Share this post


Link to post
Share on other sites

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

 

       $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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

 

XRHBp.jpg

 

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

Особенно siv1987

 

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

Share this post


Link to post
Share on other sites

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

Особенно siv1987

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...