Criação de BBcode em PHP

Para começar com a categoria PHP, vou ensinar-lhes como criar uma simples função para poder colocar BBcode que inclua a opção de por um texto em negrito, em cursiva, sublinhado, links e imagens.

Por Mario Juárez


Publicado em: 19/5/08
Valorize este artigo:
Veremos como realizar isto passo a passo. O primeiro é criar a função PHP sem incluir suas instruções.

<?
function BBcode($texto){
// aqui irá o conteúdo da função
return $texto;
}
?>


Para realizar isto vamos utilizar uma função muito básica em PHP, preg_replace().

De tal forma que se quisermos que quando em $texto apareçam as tags [b] e [/b] se convertam no HTML &lt;b&gt; e &lt;/b&gt; poderíamos fazê-lo da seguinte maneira:

<?
preg_replace("/\[b\](.*?)\[\/b\]/is","<b>$1</b>",$texto);
?>


E assim poderíamos realizá-lo com todas as tags simples que desejarmos, porém como sempre há uma melhor opção e essa é utilizar um array para as expressões regulares (padrão) e outro para o texto de substituição:

<?
function BBcode($texto){
   $a = array(
      "/\[i\](.*?)\[\/i\]/is",
      "/\[b\](.*?)\[\/b\]/is",
      "/\[u\](.*?)\[\/u\]/is"
   );

   $b = array(
      "<i>$1</i>",
      "<b>$1</b>",
      "<u>$1</u>"
   );
   $texto = preg_replace($a, $b, $texto);
   return $texto;
}
?>


Bem, já temos uma simples função para poder colocar texto em cursiva, negrito e riscado.

Porém, o proposto é também colocar imagens e links, para as imagens é muito similar ao anterior, mas para os links é um pouco mais complicado. A função então ficaria da seguinte maneira:

<?
function BBcode($texto){
   $a = array(
      "/\[i\](.*?)\[\/i\]/is",
      "/\[b\](.*?)\[\/b\]/is",
      "/\[u\](.*?)\[\/u\]/is",
      "/\[img\](.*?)\[\/img\]/is",
      "/\[url=(.*?)\](.*?)\[\/url\]/is"
   );

   $b = array(
      "<i>$1</i>",
      "<b>$1</b>",
      "<u>$1</u>",
      "<img src=\"$1\" />",
      "<a href=\"$1\" target=\"_blank\">$2</a>"
   );
   $texto = preg_replace($a, $b, $texto);
   return $texto;
}
?>

Agora também podemos adicionar à função alguma função extra como pode ser que o texto enviado em html não seja permitido e que este se mostre, isto se faz com a htmlentities() e também podemos agregar que as quebras de linha sejam convertidas automaticamente em &lt;br /&gt; con nl2br(), nossa função BBcode() final ficará da seguinte forma:

<?
function BBcode($texto){
   $texto = htmlentities($texto);
   $a = array(
      "/\[i\](.*?)\[\/i\]/is",
      "/\[b\](.*?)\[\/b\]/is",
      "/\[u\](.*?)\[\/u\]/is",
      "/\[img\](.*?)\[\/img\]/is",
      "/\[url=(.*?)\](.*?)\[\/url\]/is"
   );
   $b = array(
      "<i>$1</i>",
      "<b>$1</b>",
      "<u>$1</u>",
      "<img src=\"$1\" />",

       "<a href=\"$1\" target=\"_blank\">$2</a>"
   );
   $texto = preg_replace($a, $b, $texto);
      $texto = nl2br($texto);
   return $texto;
}
?>





Comentários do artigo
Foram enviados 3 comentários ao artigo
2 comentários não revisados
1 comentário revisado:
Por: Eduardo
16/5/07
Interessante. Vou testar. Não entendo muito de ERs, mas parece que isso realmente resolve o problema.
Vlws

Usuários :    login / registro
Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato