Страница 1 из 1

Проблема с редактированием длинных ссылок

СообщениеДобавлено: 27 май 2011, 21:41
shushara
Извините, если такой вопрос уже был на форуме. Найти ответа не смогла.

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

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

Где могла собака порыться?

Re: Проблема с редактированием длинных ссылок

СообщениеДобавлено: 29 май 2011, 15:07
Shad0w
открываем файл includes/functions.php
Ищем функцию get_preg_expression, внутри функции находим
Код: выделить все
                case 'bbcode_htm':
                        return array(
                                '#<!\-\- e \-\-><a href="mailto:(.*?)">.*?</a><!\-\- e \-\->#',
                                '#<!\-\- l \-\-><a (?:class="[\w-]+" target="[\w-]+" )?href="(.*?)(?:(&amp;|\?)sid=[0-9a-f]{32})?">.*?</a><!\-\- l \-\->#',
                                '#<!\-\- ([mw]) \-\-><a (?:class="[\w-]+" target="[\w-]+" )?href="(.*?)">.*?</a><!\-\- \1 \-\->#',
                                '#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/.*? \/><!\-\- s\1 \-\->#',
                                '#<!\-\- .*? \-\->#s',
                                '#<.*?>#s',
                        );
                break;

Изменяем на
Код: выделить все
                case 'bbcode_htm':
                        return array(
                                '#<!\-\- e \-\-><a href="mailto:(.*?)">.*?</a><!\-\- e \-\->#',
                                '#<!\-\- l \-\-><a (?:class="[\w-]+" target="[\w-]+" )?href="(.*?)(?:(&amp;|\?)sid=[0-9a-f]{32})?">.*?</a><!\-\- l \-\->#',
                                '#<!\-\- ([mw]) \-\-><a (?:class="[\w-]+" target="[\w-]+" )?href="(.*?)">.*?</a><!\-\- \1 \-\->#',
                                '#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/.*? \/><!\-\- s\1 \-\->#',
                                '#<!\-\- .*? \-\->#s',
                                '#<a (?:class="[\w-]+" href=")#s',
                                '#" target="[\w-]+">.*?</a>#s',
                                '#<.*?>#s',
                        );
                break;

Сохраняем файл, наслаждаемся исправленным багом.

СообщениеДобавлено: 31 май 2011, 20:06
shushara
Спасибо за помощь.

Но это не помогло. Может надо что-то еще сделать?

Пишу новое сообщение в форум, в сообщении длинная ссылка.
Не отправляя сообщения нажимаю "предосмотр", после этого в окне редактирования уже испорченная ссылка.

СообщениеДобавлено: 01 июн 2011, 07:40
crash
кэш чистили?

СообщениеДобавлено: 01 июн 2011, 12:49
shushara
Да, чистила.

И еще вопрос: в приведенном тексте правки касаются 'bbcode_htm"
Но портится длинная ссылка только в том случае, если она не обрамляется bb-кодами, а вводится вот так как есть http://www.и-так-далее-и-тому-подобное/

Если обрамлять длинную ссылку bb-кодами, то она ведет себя корректно.

Re: Проблема с редактированием длинных ссылок

СообщениеДобавлено: 02 июн 2011, 02:14
Shad0w
Эээ, вообще-то такого не должно быть, в режиме предпросмотра текст сообщения не поступает парсеру на обработку, ну по крайней мере в моей версии так. Я не знаю, если у вас так происходит, надо смотреть, куда отправляется текст в режиме предпросмотра.
Я дал исправление ссылок уже после того, как сообщение попало в базу - т.е. прошло через внутренний парсер (ББ-коды, ссылки, е-мейлы, фильтрация "вредных" символов и пр.), и если его вызвать повторно на редактирование (модератором, админом или самим пользователем), вот там как раз тоже испорченная ссылка уже выводилась.
Вы кэш форума чистили или браузера?

Re: Проблема с редактированием длинных ссылок

СообщениеДобавлено: 14 июн 2011, 16:04
shushara
Shad0w писал(а): Я не знаю, если у вас так происходит, надо смотреть, куда отправляется текст в режиме предпросмотра.

Эта... а где смотреть? :)

Shad0w писал(а):Вы кэш форума чистили или браузера?

Кэш форума.

Пришлось пойти на проставление заплатки, без гарантий :(
Чтобы форум мог работать (а то пользователи сильно ругаются и я их понимаю..), пришлось в коде закомментировать обрезку длинных строк.
В модуле functions_content.php в функции make_clickable_callback строку
Код: выделить все
$short_url = (strlen($url) > 55) ? substr($url, 0, 39) . ' ... ' . substr($url, -10) : $url;

заменила на строку:
Код: выделить все
$short_url = $url;

Потому что в предосмотр приходила уже испорченная вот эта строка.
И все заработало.
Вот только не уверена, что это хороший способ..