-
BBCode in php
Salve a tutti, sto cercando di fare un bbcode in php, ho buttato giù due righe al volo e sono arrivato ad un buon punto
Codice PHP:
<?
function bbcode ($str) {
$htmltags = array(
'/\<b\>(.*?)\<\/b\>/is',
'/\<i\>(.*?)\<\/i\>/is',
'/\<u\>(.*?)\<\/u\>/is',
'/\<ul\>(.*?)\<\/ul\>/is',
'/\<li\>(.*?)\<\/li\>/is',
'/\<img(.*?) src=\"(.*?)\" (.*?)\>/is',
'/\<div style="text-align:(.*?)"\>(.*?)\<\/div\>/is',
'/\<br(.*?)\>/is',
'/\<strong\>(.*?)\<\/strong\>/is',
'/\<a href=\"(.*?)\"(.*?)\>(.*?)\<\/a\>/is',
'/\<a href=\'(.*?)\'(.*?)\>(.*?)\<\/a\>/is',
);
$bbtags = array(
'[b]$1[/b]',
'[i]$1[/i]',
'[u]$1[/u]',
'[list]$1[/list]',
'[*]$1[/*]',
'[img]$2[/img]',
'[$1]$2[/$1]',
'\n',
'[b]$1[/b]',
'[url=$1]$3[/url]',
'[url=$1]$3[/url]',
);
$str = preg_replace ($htmltags, $bbtags, $str);
$str = nl2br($str);
return $str;
}
$str = $_POST[text];
echo bbcode($str);
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<textarea name=text></textarea>
<input type="submit" name="submit" value="Vai">
</form>
il mio problema è questo: come posso eliminare tutti gli altri tag che non sono presenti nell'array di ricerca ($htmltags)? ad esempio se qualcuno scrive nella textarea l'attributo <table>, l'output mostrerà una tabella...!
Grazie anticipatamente! :wink:
-
Ciao, in pratica prima di convertire il BBCode devi convertire i caratteri HTML nelle relative identità. Puoi farlo con htmlentities() ;)
-
Oppure, se vuoi proprio eliminarli come hai chiesto, puoi usare strip_tags().
Ciao!
-
Se uso htmlentities() quando poi estraggo il testo dal db mi compare "<table>che ne so </table>" se invece uso strip_tags() non funziona il capolinea(nl2br($str))...se invece faccio così:
Codice PHP:
$consentiti = array('<b>','<li>',...);
if ( in_array($da_verificare,$consentiti) )
{
//codice
}
else
{
//elimino questo tag con strip_tags()
}
può funzionare? oppure avete una soluzione migliore?
EDIT: mi sto accorgendo che con questo metodo se scrivo $da_verificare = "<strong>ciao</strong>" mi finisce nell'else invece che nei caratteri consentiti...
-
Prima userei lo strip_tags(), poi nl2br().
Ciao!