Перейти к содержанию

Некорректная обработка длинных ссылок


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

как правильно установить этот патч?

после открытия архива файл minify_patch_07_13 - public-min-config.php

 залил в

testforum-public-min

 с заменой файла

 

сообщение в АЦ осталось

-929206895.jpg

 

что не так делаю?

прошу помощи

спасибо заранее

Изменено пользователем kovboi
Ссылка на комментарий
Поделиться на другие сайты

kovboi, сообщение исчезнет позже само. По этому патчу безопасности есть отдельная тема.
Ссылка на комментарий
Поделиться на другие сайты

podvorie, и на этом форуме такой проблемы нет. Запарился уже. После установки того патча (345_linkify.zip) что-то надо сделать?

нет. У меня все сразу заработало.

Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте.

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

Т.е. вставляю длинную ссылку, а на выходе полный текст ссылки, но только часть ее сделана гиперссылкой.

 

Как это исправить?

Спасибо!

Перевод от IBR? Если да, то дело в нем.

 

Я решил этот баг так. Внимание, это для версии 3.4.5 , но думаю в ранних версиях аналогично

 

Файл /ips_kernel/HTMLPurifier/HTMLPurifier/Injector/Linkify.php

 

 

находим код 

        $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 )

меняем на 

        $uni=(IPS_DOC_CHAR_SET=="UTF-8")?"u":"";
        preg_match_all( "#(.*?)(()?((?:http|ftp|https)://[а-яА-Яw-_]+(?:.[а-яА-Яw-_]+)?(?:[а-яА-Яw-.,()@?^=%&:/~+#]*[а-яА-Яw-@?^=%&/~+#]))(.*?)$#ims" . $uni, $token->data, $matches );

сохраняем файл (обязательно!!) в кодировке UTF-8 (без BOM!!!!). Теперь все работает, по крайней мере у меня так.

 

Мой файл Linkify.php  в аттаче

Linkify.zip

Ссылка на комментарий
Поделиться на другие сайты

kgb, не знаю чей перевод, NULL тут скачивал. Спасибо, попробую!

Ссылка на комментарий
Поделиться на другие сайты

spoken,

ну вот, можете посмотреть, и русские урлы и транслит обрабатывает 

__homemasters.ru/forum/topic/23228-obsuzhdenie-novogo-foruma/page-7#entry266331

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Вот точна такая-же проблема ссылками,попробую выше перечисленные способы,может поможет  :)

Ссылка на комментарий
Поделиться на другие сайты

Вообщем я пришел к окончательному решению этой проблемы!

Все дело в том что администратор этого сайта распространяет этим безобразным багом от которого ссылки не правильно вставляются и получается так что пол ссылки кликабельная а дальше она как текст!

Что-бы устранить этот баг мне пришлось откопать официальную версию IPB 3.4.4 и вытащить с нее файлик - Linkify.php

Теперь давайте посмотрим чем отличается этот файлик от файлика который валяется в IPB 3.4.4 представленным администратором этого прекрасного форума!

 

Исходник файла Linkify.php от IPB 3.4.4 скаченного с этого форума

<?php


/**
 * Injector that converts http, https and ftp text URLs to actual links.
 */
class HTMLPurifier_Injector_Linkify extends HTMLPurifier_Injector
{


    public $name = 'Linkify';
    public $needed = array('a' => array('href'));


    public function handleText(&$token) {
        if (!$this->allowsElement('a')) return;


        if (strpos($token->data, '://') === false) {
            // our really quick heuristic failed, abort
            // this may not work so well if we want to match things like
            // "google.com", but then again, most people don't
            return;
        }
//print $token->data;
        // there is/are URL(s). Let's split the string:
        // Note: this regex is extremely permissive
        //$bits = preg_split('#((?:https?|ftp)://[^s'"<>()]+)#S', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
        /* MODIFIED April 26, 2013
            @link __community.invisionpower.com/resources/bugs.html/_/ip-board/links-being-corrupted-or-malformed-in-board-and-nexus-r41993
            Test case:
__invisionpower.com,
__invisionpower.com.
__invisionpower.com
https://invisionpower.com
https://blah.gov/blah-blah.as
__en.wikipedia.org/wiki/Chi_(mythology)
(__google.com)
             */
        $uni=(IPS_DOC_CHAR_SET=="UTF-8")?"u":"";
        preg_match_all( "#(.*?)(()?((?:http|ftp|https)://[p{L}-_]+(?:.[p{L}-_]+)?(?:[p{L}-.,()@?^=%&amp;:/~+#]*[p{L}-@?^=%&amp;/~+#]))(.*?)$#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]);
                    }
                }
            }
        }
//print_r($token);exit;
    }


}


// vim: et sw=4 sts=4

Исходник файла Linkify.php от IPB 3.4.4 скаченного с официального форума

<?php


/**
 * Injector that converts http, https and ftp text URLs to actual links.
 */
class HTMLPurifier_Injector_Linkify extends HTMLPurifier_Injector
{


    public $name = 'Linkify';
    public $needed = array('a' => array('href'));


    public function handleText(&$token) {
        if (!$this->allowsElement('a')) return;


        if (strpos($token->data, '://') === false) {
            // our really quick heuristic failed, abort
            // this may not work so well if we want to match things like
            // "google.com", but then again, most people don't
            return;
        }
//print $token->data;
        // there is/are URL(s). Let's split the string:
        // Note: this regex is extremely permissive
        //$bits = preg_split('#((?:https?|ftp)://[^s'"<>()]+)#S', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
        /* MODIFIED April 26, 2013
            @link __community.invisionpower.com/resources/bugs.html/_/ip-board/links-being-corrupted-or-malformed-in-board-and-nexus-r41993
            Test case:
__invisionpower.com,
__invisionpower.com.
__invisionpower.com
https://invisionpower.com
https://blah.gov/blah-blah.as
__en.wikipedia.org/wiki/Chi_(mythology)
(__google.com)
             */
        preg_match_all( "#(.*?)(()?((?:http|ftp|https)://[w-_]+(?:.[w-_]+)?(?:[w-.,()@?^=%&amp;:/~+#]*[w-@?^=%&amp;/~+#]))(.*?)$#ims", $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) )
        {
            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]);
                    }
                }
            }
        }
//print_r($token);exit;
    }


}


// vim: et sw=4 sts=4

 

Ну вот,теперь вы сами увидели своими глазами что в этих двух файлах есть отличия!

Вообщем ребят не буду тут демагогию разводить если хотите от этого бага избавится то идите по этому пути:

ips_kernel/HTMLPurifier/HTMLPurifier/Injector/Linkify.php

и все содержимое файла Linkify.php сотрите и закиньте в него код от официального файла и будет вам счастье!

Изменено пользователем Solovei
Ссылка на комментарий
Поделиться на другие сайты

Этот сайт не виноват, это авторы пакета русификации IBR сломали этот файл.

Ссылка на комментарий
Поделиться на другие сайты

Вот сам файл,его подмените на свой и воля (только для IPB 3.4.5)



Этот сайт не виноват, это авторы пакета русификации IBR сломали этот файл.

Возможно и так  :P  Ах да я там выше пост написал по устранению этого бага и ошибся в версиях,в место 3.4.5 я написал 3.4.4

Linkify.php

Изменено пользователем Solovei
Ссылка на комментарий
Поделиться на другие сайты

Возможно и так   Ах да я там выше пост написал по устранению этого бага и ошибся в версиях,в место 3.4.5 я написал 3.4.4 Прикрепленные файлы

 

Вы выложили оригинальный Linkify.php .

Но он не устраняет этот баг, если в ссылках используется кирилица, как, например, на этом форуме. Мой вариант работает как с латиницей так и с кирилицей

Изменено пользователем kgb
Ссылка на комментарий
Поделиться на другие сайты

Вы выложили оригинальный Linkify.php .

Но он не устраняет этот баг, если в ссылках используется кирилица, как, например, на этом форуме. Мой вариант работает как с латиницей так и с кирилицей

Спасибо, Ваш вариант помог с сылками.
Ссылка на комментарий
Поделиться на другие сайты

Ребят подскажите пожалуйста как в этот код добавить ещё символ "|" без него ссылка перестаёт работать, а после отправки сообщения он меняется на %7C

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...
kgb, даже с вашим файлом ссылки типа ipbmafia.ru/topic/test206/ парсятся у меня только до цифр. Задолбала эта проблема.
Ссылка на комментарий
Поделиться на другие сайты

  • 5 месяцев спустя...

Ребят, а как запретить автоматическое преобразование ссылок вида __site.ru в активные ссылки? В общем нужно чтобы ссылки добавлялись просто как текст.

Ссылка на комментарий
Поделиться на другие сайты

Kinkl, интересный вопрос. Но его нужно в отдельную тему. 

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Никто не сталкивался проблемой, что ссылки с подчеркиванием типа __some_domain.com/ постятся некорректно?

Изменено пользователем joefast
Ссылка на комментарий
Поделиться на другие сайты

  • 9 месяцев спустя...

Добрый день.
Подскажите пожалуйста. У меня ipb 3.4.6.
При попытке закоментить топик стартера жмем ПКМ "Вставить" текст. CTRL+V тоже не приводят к желаемому результату. Где копать не подскажите?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...