Como criar sistema de BBCode

Como Criar Sistema de BBCode

O BBCode é um recurso amplamente utilizado em fóruns. Ele permite editar textos de forma simples e rápida, sendo de fácil compreensão inclusive para leigos em HTML.

Neste post mostrarei como criar alguns BBCodes mais usados, como [b] (negrito), [i] (itálico), [img] (imagem), [url] (link), (para vídeos do youtube) e outros.

Como Funciona o BBCode

Basicamente, o que precisamos para montar o sistema de BBCode é usar funções de reposicionamento (replace) de textos, utilizando Expressões Regulares (ER’s), a fim de modificar apenas uma parte da string, sem perder o dado principal contido nela – o conteúdo a ser exibido com formatação.

Vamos começar com exemplos simples.

BBCode para Negrito e Itálico

1
2
3
4
5
6
7
8
9
// exemplo 1
$str = 'exemplo de texto em [b]negrito[/b] para testar BBCode';
$str = preg_replace( "/\[b\](.*?)\[\/b\]/i", "<strong>$1</strong>", $str );
echo $str;
 
// exemplo 2
$str = 'exemplo de texto em [b]negrito[/b] para testar BBCode';
$str = preg_replace( "/\[(\/)?b\]/i", "<$1strong>", $str );
echo $str;

A vantagem do primeiro exemplo é que, se o usuário esquecer de fechar a tag, por exemplo, o texto não ficará totalmente em negrito. Teste o segundo exemplo com a string abaixo e veja o resultado.

1
$str = 'exemplo de texto em [b]negrito[/b para testar BBCode';

A ER irá casar (match) com “[b]”, inserindo a tag . Porém, não encontrará o fechamento “[/b]”, para inserir a tag . Assim, todo o texto seguinte ficará em negrito.

O BBCode para itálico é praticamente igual. Basta mudar [b] para [i] e para .

BBCode para Imagens

Para inserir imagens, geralmente é usada a seguinte sintaxe:

1
[img]http://url_da_imagem.jpg[/img]

Nesse caso, usaremos o seguinte trecho para transformarmos o BBCode em HTML:

1
2
3
$str = '[img]http://www.inf.ufpr.br/rbc08/linux_user_id.png[/img]';
$str = preg_replace( "/\[img\](.*?)\[\/img\]/i", "<img src="\&quot;$1\&quot;" alt="\&quot;texto_alternativo\&quot;" />", $str );
echo $str;

A ER captura o conteúdo entre as tags [img] e [/img] e o insere no atributo src da tag img.

BBCode para Links

Vamos assumir que o BBCode para link seja da seguinte forma:

[url=http://url_desejada]Texto que será exibido como link[/url]

Para essa situação, devemos casar duas string: a URL e o texto a ser exibido. Logo, usaremos o seguinte código:

1
2
3
$str = '[url=http://www.rberaldo.com.br]Blog do Beraldo[/url]';
$str = preg_replace( "/\[url=(.*?)\](.*?)\[\/url\]/i", "<a href="\&quot;$1\&quot;" target="\&quot;blank\&quot;">$2</a>", $str );
echo $str;

Adicionei o atributo target para evitar que o link seja exibido na mesma página. Você pode retirá-lo. Também pode adicionar outros atributos, como rel, a fim de definir a relação do link com sua página.

BBCode para Texto Colorido

Para colorir textos, usaremos o BBCode [color=cor_desejada][texto[/color].

1
2
3
$str = '[color=red]texto vermelho[/color]';
$str = preg_replace( "/\[color=(.*?)\](.*?)\[\/color\]/i", "$2", $str );
echo $str;

É possível usar nomes de cores, como green, red, blue, black etc, ou o código hexadecimal dela, no padrão #123456.

BBCode para Vídeos do Youtube

O Youtube disponibiliza em sua página o código-fonte do vídeo exibido, a fim de permitir que você o insira em sua página. Logo, também podemos criar um BBCode para inserir vídeos, bastando inserir o código embed (incorporar) mostrado na página do Youtube, junto ao player do vídeo, como mostra a imagem abaixo:

Como copiar código para incorporar vídeo do youtube à sua página

O código para postagem é basicamente este:

<object width="425" height="344">   <param name="movie" value="http://www.youtube.com/v/codigo_do_video" /> <param name="allowFullScreen" value="true" />   <param name="allowscriptaccess" value="always" />   <embed src="http://www.youtube.com/v/codigo_do_video" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="allowfullscreen" width="425" height="344" /></object>

Logo, basta inserirmos o código do vídeo onde está a string “codigo_do_video”.

1
2
3
// string que será usada no reposicionamento
$replace = "
<object width="\&quot;425\&quot;" height="\&quot;344\&quot;">   <param name="\&quot;movie\&quot;" value="\&quot;http://www.youtube.com/v/$1\&quot;" />  <param name="\&quot;allowFullScreen\&quot;" value="\&quot;true\&quot;" />   <param name="\&quot;allowscriptaccess\&quot;" value="\&quot;always\&quot;" />   <embed src="\&quot;http://www.youtube.com/v/$1\&quot;" type="\&quot;application/x-shockwave-flash\&quot;" allowscriptaccess="\&quot;always\&quot;" allowfullscreen="allowfullscreen" width="\&quot;425\&quot;" height="\&quot;344\&quot;" /></object>"; $str = '[youtube]http://www.youtube.com/watch?v=YaXLlyEm4kQ&amp;feature=rec-HM-r2[/youtube]'; $str = preg_replace( "/\[youtube\].+?watch\?v=([^&amp;]+).*?\[\/youtube\]/i", $replace, $str ); echo $str;

Criei a variável $replace para facilitar a visualização do código que será usado no replace. A ER desse exemplo é um pouco mais complexa, mas não é tão difícil de compreendê-la. “.+?” casa com “http://” até qualquer coisa antes de “watch”. “([^&]+)” pega o código do vídeo, que não pode contar o caractere “&”, que é o delimitador de variáveis da URL. Após o código do vídeo, pode ou não haver outras variáveis, por isso termina-se com “.*?”.

Lógica semelhante pode ser usada para Google Vídeos ou outros sites afins.

É possível criar BBCodes para diversas outras finalidades. Basta ter criatividade e conhecimento de ER’s, para saber montar as regras de reposicionamento.

Alguns links interessantes:
Guia sobre Expressões Regulares
Documentação da função preg_replace

 

The following two tabs change content below.
Graduado em Ciência da Computação, pela Universidade Federal do Paraná (UFPR), é desenvolvedor de software desde 2008, com foco em Desenvolvimento Web com PHP.