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
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 <b> 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 <br /> 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
Interessante. Vou testar. Não entendo muito de ERs, mas parece que isso realmente resolve o problema.
Vlws