Forum Webscript.Ru

Программирование => PHP => Тема начата: kder от 03 Июля 2006, 00:13:53

Название: bbcode в coBreeder 2005
Отправлено: kder от 03 Июля 2006, 00:13:53
Вобщем такое дело отци.. Незнаю что делать, прошу у вас помощи.
Использую скрипт coBreeder 2005 в локальной сети как WareZ портал. Юзеры могут оставлять ссылки на ftp и http, но это не очень практичн так как в нашей большой сети более распространено p2p нежели ftp, да и не все хотят ставить себе ftp сервер. Соот-но нужно чтобы скрипт мог обрабатывать magnet ссылки для p2p. Тоесть юзер вставляет magnet ссылку просто как текст а она после постинга будет смотреть как полноценная magnet ссылка.
Поспрашивал у знакомых говорят что это в BBCode нада рытся, но дело в том что я плохо его знаю.
Мои действия: Открыл фаил (в котором по видимому список BBCode, нашел строки где обрабатываются Url ссылки, но я незнаю что писать чтобы могли обрабатыватся magnet как норм ссылки для p2p)
Пример содержания (не всё содержимое ;) ) того файла привожу ниже:
// [URL]
      $this->bbcodes[\'standard\'][\'find\'][\'[url]\'] = \'#\\[url\\](.*)\\[/url\\]#esiU\';
      $this->bbcodes[\'standard\'][\'replace\'][\'[url]\'] = "\\$this->handle_bbcode_url(\'\\\\1\', \'\', \'url\')";
      $this->bbcodes[\'standard\'][\'recurse\'][\'url\'][0] = array(\'handler\' => \'\\$this->handle_bbcode_url\');
      //
      $this->bbcodes[\'standard\'][\'find\'][\'[url=\'] = \'#\\[url=("|"|\\\'|)(.*)\\\\1\\](.*)\\[/url\\]#esiU\';
      $this->bbcodes[\'standard\'][\'replace\'][\'[url=\'] = "\\$this->handle_bbcode_url(\'\\\\3\', \'\\\\2\', \'url\')";
      $this->bbcodes[\'standard\'][\'recurse\'][\'url\'][1] = array(\'handler\' => \'\\$this->handle_bbcode_url\');

Прошу вашей помощи, так как я ещё глуп для такого уровня ;) (http://XXX)
Название: bbcode в coBreeder 2005
Отправлено: kder от 04 Июля 2006, 19:32:38
Жаль что незнаете
Название: bbcode в coBreeder 2005
Отправлено: CGVictor от 04 Июля 2006, 20:18:08
kder
Могу сказать, что:
1. Ты не тот кусок привел в качестве кода :)
2. Лучше было бы не ссылаться на скрипт (95% читающих он неизвестен), а показать, что имеешь на входе и что на выходе.

Instant solution:
- В первой строке во второй части пишешь регулярку для определения magnet-ссылки (use мозг и/или гугль)
- во второй - тупо ("N-chunk для url", "N-chunk для заголовка если, нужен", \'url\')
- третья такая же, разве что номер правила другой
- и во всех придумываешь id для правила (например, [magnet])

[off]Рыться в гугле я за тебя не буду, сорри.[/off]
Название: bbcode в coBreeder 2005
Отправлено: kder от 04 Июля 2006, 22:08:47
Если я не ошибась то вверху написал bbcode для url а тут обработчик, помогите, скажите что и где писать чтоб magnet:? тоже обрабатывали, я пытался разобратся не получается

private function handle_bbcode_url($text, $link, $type = \'url\')
    {
        if (!trim($text))
        {
            return \'\';
        }

        $rightlink = trim($link);
        if (empty($rightlink))
        {
            // no option -- use param
            $rightlink = trim($text);
        }

        $rightlink = str_replace(\'"\', \'"\', $rightlink);

        if($type == \'url\' AND !preg_match(\'#^[a-z0-9]+://#si\', $rightlink))
        {
            $rightlink = \'http://\'.$rightlink;
        }

        if (!trim($link) OR $text == $rightlink)
        {
            $tmp = unhtmlspecialchars($rightlink);
            if (strlen($tmp) > $this->wordwrap)
            {
                $text = htmlspecialchars_uni(substr($tmp, 0, $this->wordwrap - 15) . \'...\' . substr($tmp, -15));
            }
        }

        // remove double spaces -- fixes issues with wordwrap
        $rightlink = str_replace(\'  \', \'\', $rightlink);

        // strip extra quotes from hyperlink
        $text = str_replace(\'\\"\', \'"\', $text);

        if ($type == \'url\')
        {
            // standard URL hyperlink
            return \'\'.$text.\'\';
        }
        else
        {
            // email hyperlink (mailto:)
            if (is_valid_email($rightlink))
            {
                return \'\'.$text.\'\';
            }
            else
            {
                // not a valid email - don\'t link it
                return \'\'.$text.\'\';
            }
        }
    }
Название: bbcode в coBreeder 2005
Отправлено: CGVictor от 05 Июля 2006, 12:06:15
kder
Второй кусок кода здесь не особо нужен. Так, логику понять.
Решение я тебе обрисовал.

Регулярку можно начать искать здесь: http://magnet-uri.sourceforge.net/