На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ALXR
  
    > Регулярные выражения...
      Есть функция:
      ExpandedWrap disabled
        function bbcodes($out)
        {
            $search[] = "#\[color=(.*?)](.*?)\[/color\]#si";
            $replace[] = '<font color=$1>$2</font>';
            $search[] = "#\[b\](.*?)\[/b\]#si";
            $replace[] = '<b>$1</b>';
            $search[] = "#\[i\](.*?)\[/i\]#si";
            $replace[] = '<i>$1</i>';
            $search[] = "#\[u\](.*?)\[/u\]#si";
            $replace[] = '<u>$1</u>';
            $search[] = "#\[img\](.*?)\[/img\]#si";
            $replace[] = '<img src="$1" class=border_1m>';
            $search[] = "#\[img right\](.*?)\[/img\]#si";
            $replace[] = '<img src="$1" align=right class=border_1m>';
            $search[] = "#\[url new_win\](.*?)\[/url\]#si";
            $replace[] = '<a href="http://$1" target=_blank>$1</a>';
            $search[] = "#\[url\](.*?)\[/url\]#si";
            $replace[] = '<a href="http://$1">$1</a>';
            $search[] = "#\[url=([a-z]+://)(\S*?) new_win\](.*?)\[/url\]#si";
            $replace[] = '<a href="$1$2" target=_blank>$3</a>';
            $search[] = "#\[url=([a-z]+://)(\S*?)\](.*?)\[/url\]#si";
            $replace[] = '<a href="$1$2">$3</a>';
            $search[] = "/\s(\w+:\/\/)(\S+)/";
            $replace[] = ' <a href="$1$2" target=_blank>$1$2</a>';
            
            return preg_replace($search, $replace, $out);
        }

      Обратите внимание на последние элементы массивов $search и $replace. Там происходит замена введенной ссылки на тег <a ...></a>. Так вот, в данном случае получается белеберда полная. :wall: Ведь получается, что ищутся все эти , , [url][/url], пр. и заменяются на HTML-тэги. А потом в конце бац (!) и всё это портится заменой "http://..." на "<a href=...>...</a>".
      Как-то вообщем нужно включить в рег. выр. проверка на отсутствие квадратных скобок... Как?
        вместо
        ExpandedWrap disabled
          $search[] = "/\s(\w+:\/\/)(\S+)/";

        напиши
        ExpandedWrap disabled
          $search[] = "/\s[^\"](http:\/\/)([\S\/.-_]+)[^\"]";


        вроде должно помочь, я не проверял.
        Сообщение отредактировано: Axis -
          Axis
          Не, чего-то не то... Путаницы с заменами не происходит, но зато не заменяет ссылки без bb-тэгов. :)
            DMX
            Проблема-то есть?
            Нужно, чтобы текст в BB-кодах(урлы) на ссылки(<a href...) не заменялся или что?

            Вообще функцию эту проверял в работе?
            ExpandedWrap disabled
              bbcodes()

            Или только смотришь на нее,думаешь как она работает и делаешь выводы?
              Черт... :wall: >:( Только что просёк, что трабла была в пробеле между "[img]" и "[/img]", потому то и выводилось не правильно все. А я думал, что эт регулярка (regex) неверно написана. :P

              Вопрос решен. 8-)
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0711 ]   [ 14 queries used ]   [ Generated: 29.05.24, 01:01 GMT ]