asterix_kpi 1 07/16/13 20:56 Доброго времени суток!При вставке ссылки из буфера обмена в форму ответа и последующей отправки ответа ...В сообщении криво отображаеться ссылка...Например: иммеем ссылку вида _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=1601360http://domain.ru/forum/topic/76643-novyi-forum/?p=1601360 Как починить?Форум 3.4.5Спасибо! Поделиться сообщением Ссылка на сообщение
Bot 5 07/16/13 20:56 Обратите внимание По указанному вами в профиле "Board url" находится не IP.Board, либо модифицированный пиратский скрипт с удаленными копирайтами. Если вы указали неверный URL, пожауйста, поправьте его, потому что он скорее всего потребуется при диагностике вашей проблемы. Нелицензионные скрипты не приветствуются, т.к. зачастую именно некорректное "нуление" и является причиной проблем в них. Поделиться сообщением Ссылка на сообщение
asterix_kpi 1 07/16/13 21:07 Вот была похожая тема...но там проблемма в квадратных скобках....http://community.invisionpower.com/resources/bugs.html/_/ip-board/url-truncates-wrong-r38342 Поделиться сообщением Ссылка на сообщение
siv1987 2628 07/16/13 21:19 Как починить?Написать разработчикам, или же обрамлять ссылку в ббкод url [url]http://domain.ru/forum/topic/76643-novyi-forum/?p=1601360[/url] Поделиться сообщением Ссылка на сообщение
asterix_kpi 1 07/16/13 21:29 Написать разработчикам, или же обрамлять ссылку в ббкод url [url]http://domain.ru/forum/topic/76643-novyi-forum/?p=1601360[/url]Спасибо!На старой версии 3.1.4 - при вставке просто ссылки в ответ - движок автоматически обрамлял.... а счаз беда... Поделиться сообщением Ссылка на сообщение
siv1987 2628 07/16/13 21:47 Автоматически никогда ничего не обрамлялось. Просто парсеры стали разными. А виноват во всем все тот же HTMLPurifier Поделиться сообщением Ссылка на сообщение
siv1987 2628 07/16/13 23:36 Открыть /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 для захват цифр.Но еще остается баг, что в одной строке вторая и последующие ссылки не парсятся. Парсится только первая. 4 Поделиться сообщением Ссылка на сообщение
siv1987 2628 07/17/13 11:47 По хорошему весь их этот код $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'); } } 1 Поделиться сообщением Ссылка на сообщение
asterix_kpi 1 07/17/13 12:42 Спасибо огромное!!! Помогло..... Поделиться сообщением Ссылка на сообщение
Zero108 124 07/17/13 13:46 По хорошему весь их этот коднадо заменить на оригинальный, пока не сделают нормальную обработку урлов.Кто имеется в виду под их и что такое оригинальный (чей?). Ничего непонятно. Поделиться сообщением Ссылка на сообщение
siv1987 2628 07/17/13 14:00 Оригинальный - имеется ввиду оригинальный код из функции HTMLPurifier_Injector_Linkify::handleText() в библиотеки htmlpurifier (сторонняя библиотека которая прикручена к IPB и модифицирована IPS), тот маленький кусочек закаментированого кода. Ладно регулярное выражение то понятно, но зачем заменили preg_split на preg_match_all с которого довольно трудно получить результат соответствующей старой логике - не понятно. Поделиться сообщением Ссылка на сообщение
Zero108 124 07/17/13 14:06 Ничего не менял в Linkify.php или где-то еще в лицензионной версии 3.4.5. Ссылка топик стартера нормально парсится: Посмотрю, что у меня в Linkify.php сейчас.. Поделиться сообщением Ссылка на сообщение
Zero108 124 07/17/13 14:09 У меня стоит строка: #(.*?)(\()?((?:http|ftp|https):\/\/[\w\-_]+(?:\.[\w\-_]+)?(?:[\w\-\.,\(\)@?^=%&:/~\+\#]*[\w\-\@?^=%&/~\+\#]))(.*?)$#ims" У топик стартера локализация от IBR или что-то еще не то? Поделиться сообщением Ссылка на сообщение
asterix_kpi 1 07/17/13 16:16 У меня стоит строка: #(.*?)(\()?((?:http|ftp|https):\/\/[\w\-_]+(?:\.[\w\-_]+)?(?:[\w\-\.,\(\)@?^=%&:/~\+\#]*[\w\-\@?^=%&/~\+\#]))(.*?)$#ims" У топик стартера локализация от IBR или что-то еще не то? Залил оригинальный...и все заработало... Еще раз Всем спасибо!!!Особенно siv1987 З.Ы.Версия лицензия 3.4.5 + локализация IBR поверх... Поделиться сообщением Ссылка на сообщение
Zero108 124 07/17/13 16:58 Залил оригинальный...и все заработало... Еще раз Всем спасибо!!!Особенно siv1987 З.Ы.Версия лицензия 3.4.5 + локализация IBR поверх... А почему не пишите гневные письма на форуме техподдержки IBR?! И второй вопрос: чем прекрасна локализация, а не просто перевод, которых масса бесплатных и платных? Хотя бы вот на вашем примере? Поделиться сообщением Ссылка на сообщение