Единый форум поддержки

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Единый форум поддержки » Форум для новичков » Парсинг bbcode


Парсинг bbcode

Сообщений 1 страница 10 из 10

1

Не знал, куда написать, решил сюда. Какая функция превращает bbcode в html? Просто мне надо сделать две функции: одна конвертирует bbcode в html, а другая обратно. В кодах покопался, но ничего не нашёл. Помогите, пожалуйста!

0

2

Hyppoprogramm
Парсер постов - в движке форума в php. Движок закрытый, да и php код в любом случае Вам вряд ли что-то даст.
Для примера парсера на javascript можете посмотреть скрипты Мгновенный предпросмотр сообщений (bbcode -> html) и Цитирование с BB-кодами (html -> bbcode).

+2

3

Спасибо!

0

4

Alex_63, честно говоря, ваш код просто не читаем. Это специально так задомано? От вашего кода голова кругом идёт. Не могу найти ту часть, где переводят html в bbcode. :tired:  Попробую привести код в порядок. Может будет понятней. :dontknow:

0

5

Нет, к сожалению я вообще не понимаю что это...  o.O

0

6

Вот первый код очень понятен:

Код:
function ParseContent () {

  if($('#main-reply:first').parents('.post').length)return;

  //==== Распарс bbcode в контенте textarea ====//
  var cnt = $('#main-reply:first').val(); //alert(cnt);

  // Отключаем распознавание HTML кодов
  cnt = cnt.replace(/&/g,'&amp;');      cnt = cnt.replace(/</g,'&lt;');      cnt = cnt.replace(/>/g,'&gt;');

  // Распарс блока Код Ч1 - //Вынимаем блоки код;
  var arrCODE = [],j=0;
  function repl1 (str, p1, offset, s){arrCODE[j]=p1; return ';code-' + j++ +';'}
  cnt = cnt.replace(/\[code\]((?:[\s\S](?!\[\/{0,1}code\]))*[\s\S]{0,1})\[\/code\]/gm,repl1);

  function replTableTd(str,attr,txt,offset,s1){
     var attrArr = attr.split(/\s/gim),strS1 = '',strS2 = '';
     for(var i=0;i<attrArr.length;i++){
          var s = attrArr[i].split(/=/gim);
          if(s==''||!s[1])continue; 
          s[1] = s[1].replace(/^"/gim,'').replace(/"$/gim,'');
          if(s[0]=='width'){strS2 += s[0]+':'+s[1]+';';}
          if(s[0]=='colspan'||s[0]=='rowspan'){strS1 += ' '+s[0]+'="'+s[1]+'"';}
          if(s[0]=='bgcolor'){ strS2+='background-color:'+s[1]+';';};

     };   //console.log(attrArr);
     if(strS2!=''){strS2 = ' style="'+strS2+'"';};
     return ( '<td'+strS1+strS2+'>'+txt+'</td>' );// return L; 
  }

  // Распарс таблиц ч1
  cnt = cnt.replace(/(\[\/?(td|tr)\])(\n+)/mgi,'$1');   cnt = cnt.replace(/\[\/table\](\n+)/mgi, '[/table]');
  cnt = cnt.replace(/\[table([\s\S]*?)\](\n+)/mgi, '[table$1]');	cnt = cnt.replace(/\[td([\s\S]*?)\]([\s\S]*?)\[\/td\]/mgi,replTableTd);
  cnt = cnt.replace(/\[td\]([\s\S]*?)\[\/td\]/mgi,'<td>$1</td>');	cnt = cnt.replace(/\[tr\]([\s\S]*?)\[\/tr\]/mgi,'<tr>$1</tr>');


  // Парсим переносы строк
  cnt = ('<p>'+cnt+'</p>').replace(/\n\n/g,'<\/p><p>').replace(/\n/g,'<br>');

  var RXquoteP   = /\[quote="#p(.*?),(.*?)"\](.*?)\[\/quote\]/gi, RXquoteL = /\[quote="(.*?),http:\/\/(.*?)"\](.*?)\[\/quote\]/gi;
  var RXquoteQ   = /\[quote="(.*?)"\](.*?)\[\/quote\]/gi,         RXquote  = /\[quote=(.*?)\](.*?)\[\/quote\]/gi, RXquote0   = /\[quote\](.*?)\[\/quote\]/gi;
  var BBquoteP   = '</p><div class="quote-box"><cite><a href=/viewtopic.php?pid=$1#p=$1>$2 '+PPREV.quote_cite+'</a></cite><blockquote><p>$3</p></blockquote></div><p>';
  var BBquoteL   = '</p><div class="quote-box"><cite><a href=\"http://$2\">$1 '+PPREV.quote_cite+'</a></cite><blockquote><p>$3</p></blockquote></div><p>';
  var BBquote0   = '</p><div class="quote-box"><blockquote><p>$1</p></blockquote></div><p>';
  var BBquote    = '</p><div class="quote-box"><cite>$1 '+PPREV.quote_cite+'</cite><blockquote><p>$2</p></blockquote></div><p>';
  var BBhidText  = '</p><div class="quote-box"><cite>Скрытый текст:</cite><blockquote><p>$2</p></blockquote></div><p>'; var spLlIn='$(this).toggleClass(\'visible\'); $(this).next().toggleClass(\'visible\');';
  var BBspoiler0 = '</p><div class="quote-box spoiler-box"><div onclick="'+ spLlIn +'">Свернутый текст</div><blockquote><p>$1</p></blockquote></div><p>';
  var BBspoiler  = '</p><div class="quote-box spoiler-box"><div onclick="'+ spLlIn +'">$1</div><blockquote><p>$2</p></blockquote></div><p>';

  // Парсим BB коды
  cnt = cnt.replace(/\[b\](.*?)\[\/b\]/gi,'<strong>$1</strong>');        cnt = cnt.replace(/\[i\](.*?)\[\/i\]/gi,'<span style="font-style:italic">$1</span>');
  cnt = cnt.replace(/\[u\](.*?)\[\/u\]/gi,'<em class="bbuline">$1</em>');	        cnt = cnt.replace(/\[s\](.*?)\[\/s\]/gi,'<del>$1</del>');
  cnt = cnt.replace(/\[h\](.*?)\[\/h\]/gi,'<span class="highlight-text">$1</span>');    cnt = cnt.replace(/\[hr\]/g,'<hr>');
  cnt = cnt.replace(/\[sup\](.*?)\[\/sup\]/gi,'<sup>$1</sup>');cnt = cnt.replace(/\[sub\](.*?)\[\/sub\]/gi,'<sub>$1</sub>');
  cnt = cnt.replace(/\[you\]/g,UserLogin);

  var j=0;if(typeof(QuoteImg)=='undefined'){while(j<4){cnt = cnt.replace(RXquoteP,BBquoteP);j++};j=0;while(j<4){cnt = cnt.replace(RXquoteL,BBquoteL);j++}}
  j=0;while(j<4){cnt = cnt.replace(RXquoteQ,BBquote);j++};j=0;while(j<4){cnt = cnt.replace(RXquote,BBquote);j++};j=0;while(j<4){cnt = cnt.replace(RXquote0,BBquote0);j++}
  cnt = cnt.replace(/\[hide=(.*?)\](.*?)\[\/hide\]/gi,BBhidText);
  cnt = cnt.replace(/\[spoiler="(.*?)"\](.*?)\[\/spoiler\]/gi,BBspoiler);    cnt = cnt.replace(/\[spoiler="(.*?)"\](.*?)\[\/spoiler\]/gi,BBspoiler);
  cnt = cnt.replace(/\[spoiler=(.*?)\](.*?)\[\/spoiler\]/gi,BBspoiler);    cnt = cnt.replace(/\[spoiler\](.*?)\[\/spoiler\]/gi,BBspoiler0);
  cnt = cnt.replace(/\[font=(.*?)\](.*?)\[\/font\]/gi,'<span style="font-family: $1;">$2</span>');
  cnt = cnt.replace(/\[size=(.*?)\](.*?)\[\/size\]/gi,'<span style="font-size: $1px;">$2</span>');
  cnt = cnt.replace(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<span style="color: $1">$2</span>');
  cnt = cnt.replace(/\[align=(.*?)\](.*?)\[\/align\]/gi,'<span style="display: block; text-align: $1">$2</span>');
  cnt = cnt.replace(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" class="postimg" />');
  cnt = cnt.replace(/\[img=(.*?)\](.*?)\[\/img\]/gi,'<img src="$2" class="postimg" title="$1" alt="$1" />');
  cnt = cnt.replace(/\[url=(.*?)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>');
  cnt = cnt.replace(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>');
  cnt = cnt.replace(/\[video\](.*?)\[\/video\]/gi,'<iframe width="480" height="284" src="$1" frameborder="0" allowfullscreen=""></iframe>');

  // Распарс остальных BBКодов
  cnt = cnt.replace(/\[abbr="(.*?)"\](.*?)\[\/abbr\]/gi,'<abbr title="$1">$2</abbr>');
  cnt = cnt.replace(/\[add\]/g,'<strong>Добавлено спустя</strong>');
  cnt = cnt.replace(/\[mark\](.*?)\[\/mark\]/gi,'<span class="highlight-text">$1</span>');

  // Распарс таблиц ч2
  function replTable(str,attr,txt,s){attr=attr.replace(/layout/g,'table-layout').replace(/=/g,':').replace(/^\s/,'').replace(/\s/gm,';');return '<table style="'+attr+'">'+txt+'</table>'}
  cnt = cnt.replace(/\[table(.*?)\](.*?)\[\/table\]/mgi,replTable);

  // Распарс Смайлов
  var SmileObj = FORUM.get('editor.smile.smilies');
  var SmileDir = FORUM.get('editor.smile.dir');
  for (var s in SmileObj) {
       var reg = new RegExp('\\s'+s.replace(/([\'\-\^\|\(\)])/g,'\\$1')+'\\s','gm');
       cnt = cnt.replace(reg,' <img src="'+SmileDir+'/'+SmileObj[s]+'" alt="'+s+'"> ');
  };

  // Парсим пробелы
  cnt = cnt.replace(/  /g,'&nbsp; ');

  // Распарс блока Код Ч2, - Возвращаем блоки код
  var st  = '</p><div class="code-box"><strong class="legend">Код:</strong><div class="blockcode"><div class="scrollbox" style="min-height:4.5em"><pre>';
  var end = '</pre></div></div></div><p>';
  function repl2 (str, p1, offset, s) {return st + arrCODE[+p1] + end;}
  if(arrCODE.length)cnt = cnt.replace(/;code-(\d+);/gm,repl2);

  // Поправка переносов строк
  cnt = cnt.replace(/<blockquote><br>/g,'<blockquote>');	cnt = cnt.replace(/<pre><br>/g,'<pre>');
  cnt = cnt.replace(/<\/div><p><br>/g,'<\/div><p>');cnt = cnt.replace(/<p><\/p><div/g,'<div');
  cnt = cnt.replace(/<\/div><p><\/p><p>/g,'<\/div><p>');	cnt = cnt.replace(/<p><br>/g,'<p>');
  cnt = cnt.replace(/<hr><br><br>/g,'<hr>');	cnt = cnt.replace(/<hr><br>/g,'<hr>');

  //==== Скрываем/показываем предпросмотр при вводе====//
  if(cnt === '' && $('#post-preview').css('display') != 'none'){ $('#post-preview').css({'display':'none'}); } 
  if(cnt != '' && $('#post-preview').css('display') == 'none'){ $('#post-preview').css({'display':'block'});}
  if(cnt === '' && $('#post-preview').css('display') == 'none')         { $('#post-preview').css({'display':'none'}); }
  if(cnt === '<p></p>' && $('#post-preview').css('display') == 'none')  { $('#post-preview').css({'display':'none'}); }
  if(cnt === '<p></p>' && $('#post-preview').css('display') != 'none')  { $('#post-preview').css({'display':'none'}); }
  $('#post-preview').find('.post-content').html(cnt);
  $('#post-preview').find('.post-box').each(function(){
    $(this).html($(this).html().replace('<\/div><p><\/p></div>','</div></div>'));
    $(this).html($(this).html().replace('<\/div><p><\/p><p><\/p></div>','</div></div>'));
  });
  if(typeof(QuoteImg)!='undefined' &&!$('#pun-messages').length){   
    $('.punbb').prepend('<style id="Hide_qCite">#post-preview .quote-box>cite{visibility:hidden!important;}</style>');
    setLinkAndAva('#post-preview'); 
  }
  window.HTMLinPost && HTMLinPost.parseTags('#post-preview');

+1

7

Алекс, не могли бы вы скинуть код конвертации HTML в BBcode?

Отредактировано Hyppoprogramm (Ср, 6 Май 2020 19:18:54)

0

8

Hyppoprogramm
Он в Вашем предыдущем сообщении и есть.
Если имелось в виду наоборот - из HTML в BBCode, то код BB-цитирования можно предварительно развернуть в удобочитаемый вид, например, используя beautifier.io.

0

9

Всё равно плохо понимаю... Тут функции названы как-то странно... Или может я туповат...  :dontknow:

0

10

Alex_63 написал(а):

Hyppoprogramm
Парсер постов - в движке форума в php. Движок закрытый, да и php код в любом случае Вам вряд ли что-то даст.
Для примера парсера на javascript можете посмотреть скрипты Мгновенный предпросмотр сообщений (bbcode -> html) и Цитирование с BB-кодами (html -> bbcode).

Добрый вечер.
И не работает B.B. Цитирование,все что меж тегами html ,бб -цитирование в упор не видит.
Как хорошо,что нашла эту тему,раньше работало все было хорошо,а теперь нет.

Вот с примерами.
Так выглядит оформление фильмов на нашем форуме.
http://forumupload.ru/uploads/0000/14/1c/35833/912917.png

Жмём B.B.-цитирование ,получаем.

http://forumupload.ru/uploads/0000/14/1c/35833/222963.png

Где открытие хоть одного HTML?Нет его.
Какое ж это бб цитирование?

Или я чего—то не понимаю?
Раньше,все что было в html,от первого до последнего символа,повторяло бб -цитирование,сейчас -фиг,нет и доли того,что требуется.
Или что такое бб -цитирование?

0


Вы здесь » Единый форум поддержки » Форум для новичков » Парсинг bbcode