Опубликовано: 16 июля 201312 г Доброго времени суток!При вставке ссылки из буфера обмена в форму ответа и последующей отправки ответа ...В сообщении криво отображаеться ссылка...Например: иммеем ссылку вида _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Спасибо!
Опубликовано: 16 июля 201312 г Обратите внимание По указанному вами в профиле "Board url" находится не IP.Board, либо модифицированный пиратский скрипт с удаленными копирайтами. Если вы указали неверный URL, пожауйста, поправьте его, потому что он скорее всего потребуется при диагностике вашей проблемы. Нелицензионные скрипты не приветствуются, т.к. зачастую именно некорректное "нуление" и является причиной проблем в них.
Опубликовано: 16 июля 201312 г Автор Вот была похожая тема...но там проблемма в квадратных скобках....http://community.invisionpower.com/resources/bugs.html/_/ip-board/url-truncates-wrong-r38342
Опубликовано: 16 июля 201312 г Как починить?Написать разработчикам, или же обрамлять ссылку в ббкод url [url]http://domain.ru/forum/topic/76643-novyi-forum/?p=1601360[/url]
Опубликовано: 16 июля 201312 г Автор Написать разработчикам, или же обрамлять ссылку в ббкод url [url]http://domain.ru/forum/topic/76643-novyi-forum/?p=1601360[/url]Спасибо!На старой версии 3.1.4 - при вставке просто ссылки в ответ - движок автоматически обрамлял.... а счаз беда...
Опубликовано: 16 июля 201312 г Автоматически никогда ничего не обрамлялось. Просто парсеры стали разными. А виноват во всем все тот же HTMLPurifier
Опубликовано: 16 июля 201312 г Открыть /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 для захват цифр.Но еще остается баг, что в одной строке вторая и последующие ссылки не парсятся. Парсится только первая.
Опубликовано: 17 июля 201312 г По хорошему весь их этот код $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'); } }
Опубликовано: 17 июля 201312 г По хорошему весь их этот коднадо заменить на оригинальный, пока не сделают нормальную обработку урлов.Кто имеется в виду под их и что такое оригинальный (чей?). Ничего непонятно.
Опубликовано: 17 июля 201312 г Оригинальный - имеется ввиду оригинальный код из функции HTMLPurifier_Injector_Linkify::handleText() в библиотеки htmlpurifier (сторонняя библиотека которая прикручена к IPB и модифицирована IPS), тот маленький кусочек закаментированого кода. Ладно регулярное выражение то понятно, но зачем заменили preg_split на preg_match_all с которого довольно трудно получить результат соответствующей старой логике - не понятно.
Опубликовано: 17 июля 201312 г Ничего не менял в Linkify.php или где-то еще в лицензионной версии 3.4.5. Ссылка топик стартера нормально парсится: Посмотрю, что у меня в Linkify.php сейчас..
Опубликовано: 17 июля 201312 г У меня стоит строка: #(.*?)(\()?((?:http|ftp|https):\/\/[\w\-_]+(?:\.[\w\-_]+)?(?:[\w\-\.,\(\)@?^=%&:/~\+\#]*[\w\-\@?^=%&/~\+\#]))(.*?)$#ims" У топик стартера локализация от IBR или что-то еще не то?
Опубликовано: 17 июля 201312 г Автор У меня стоит строка: #(.*?)(\()?((?:http|ftp|https):\/\/[\w\-_]+(?:\.[\w\-_]+)?(?:[\w\-\.,\(\)@?^=%&:/~\+\#]*[\w\-\@?^=%&/~\+\#]))(.*?)$#ims" У топик стартера локализация от IBR или что-то еще не то? Залил оригинальный...и все заработало... Еще раз Всем спасибо!!!Особенно siv1987 З.Ы.Версия лицензия 3.4.5 + локализация IBR поверх...
Опубликовано: 17 июля 201312 г Залил оригинальный...и все заработало... Еще раз Всем спасибо!!!Особенно siv1987 З.Ы.Версия лицензия 3.4.5 + локализация IBR поверх... А почему не пишите гневные письма на форуме техподдержки IBR?! И второй вопрос: чем прекрасна локализация, а не просто перевод, которых масса бесплатных и платных? Хотя бы вот на вашем примере?
Опубликовано: 17 июля 201312 г У меня стоит строка:У топик стартера локализация от IBR или что-то еще не то?На сколько я вижу идентично, за исключением метасимвола \w который заменен на юникод \p{L}. ИБР-овцы видимо забыли, что в \p{L} числовой класс (0-9) не входит как в случае с \w. За то последний не будет работать с урл-ами в которых есть кириллица в utf-8 с не правильно установленной локалью. Можно заменить \p{L} на \w, можно после добавить 0-9, это не столь важно, все равно несовместимость несколько ссылок в одной строке остается. Попробуйте разместить две-три ссылки в одной строке без перевода строк, и несколько ссылок каждая с новой строки.
Доброго времени суток!
При вставке ссылки из буфера обмена в форму ответа и последующей отправки ответа ...
В сообщении криво отображаеться ссылка...
Например: иммеем ссылку вида _http://domain.ru/forum/topic/76643-novyi-forum/?p=1601360
А получаем вот такое преобразование
http://domain.ru/forum/topic/76643-novyi-forum/?p=1601360
Как починить?
Форум 3.4.5
Спасибо!