1

Topic: В каком месте кода происходит обрамление простой ссылки в тег [URL]?

Добрый вечер!

Я не работал с PHP, плохо ориентируюсь...
Подскажите пожалуйста, в каком месте при отправлении нового сообщения происходит замена простой ссылки на BB-тег?

То есть я написал в сообщении/посте:

тест http://ya.ru test

Отправил, а по факту сохранилось:

тест [url]http://ya.ru[/url] test

Вот в каком месте кода это заменяется?

Спасибо!

2

Re: В каком месте кода происходит обрамление простой ссылки в тег [URL]?

Так а что вы хотите достичь? Может вам просто нужно отключить обрамление кодом для ссылки?

3

Re: В каком месте кода происходит обрамление простой ссылки в тег [URL]?

Ну вообще я планирую в этом месте кода скачать часть страницы по данной ссылке и выдернуть оттуда содержимое <title>.
Автоматическое получение заголовка ссылки. И это лучше делать при отправке сообщения, а не при каждом показе сообщений.

4

Re: В каком месте кода происходит обрамление простой ссылки в тег [URL]?

Если при отправке сообщения, то смотрите в файле post.php переменную $subject

5 (edited by GoodWeather 2019.11.08 16:37)

Re: В каком месте кода происходит обрамление простой ссылки в тег [URL]?

так... И при отправке (post.php) и при редактировании (edit.php) выполняется проверка:

if ($forum_config['p_message_bbcode'] == '1' || $forum_config['o_make_links'] == '1')

а если эти две настройки видимо что-то типа "BB включены" и "делать ссылками" включены, то вызывается:

preparse_bbcode(...);

из "include/parser.php"... Смотрим дальше...


Добавлено в 02:36:
Видимо это do_clickable() из "include/parser.php"...

6

Re: В каком месте кода происходит обрамление простой ссылки в тег [URL]?

Еше раз. Какова цель? Сделать ссылку с заголовком темы? Приведите пример

7

Re: В каком месте кода происходит обрамление простой ссылки в тег [URL]?

Всё! Сделал!

Куда-нибудь в начало "include/parser.php" добавим функцию:

function get_page_title($url) {
   $title = false;
   if ($handle = fopen($url, 'r')) {
      $string = stream_get_line($handle, 0, '</title>');
      fclose($handle);
      $string = (explode('<title', $string))[1];
      if (!empty($string)) {
         $title = trim((explode('>', $string))[1]);
         $input = array('[', ']', '&#91;', '&#93;');
         $output = array('&#91;', '&#93;', '[u][[/u]', '[u]][/u]');
         $title = str_replace($input, $output, $title);
      }
   }
   return $title;
}

Потом находим в "include/parser.php" в функции "handle_url_tag()" место начинающееся с:

if ($bbcode)

и меняем данный "if" как-нить типа так:

   if ($bbcode) {
      if (defined('FORUM_SUPPORT_PCRE_UNICODE') && defined('FORUM_ENABLE_IDNA')) {
         if (preg_match('!^(https?|ftp|news){1}'.preg_quote('://xn--', '!').'!', $link)) {
            $link = $idn->decode($link);
         }
      }
      if ($full_url == $link) {
         $title = get_page_title($url);
         if ($title)
            return '[u'.'rl='.$link.']'.$title.'[/url]';
         else
            return '[u'.'rl]'.$link.'[/url]';
      } else
         return '[u'.'rl='.$full_url.']'.$link.'[/url]';
   } else
      return '<a href="'.$full_url.'" target="_blank">'.$link.'</a>';

И в последней строке я ещё добавил target="_blank" - чтоб ссылки в новой вкладке открывались.

$matches[2]

Наверняка ещё потребует всяких доработок, но уже на что-то похоже! С:

2