Sto facendo, per la nuova versione del sito, una funzione, che trasforma il testo, contenente il codice bb, con il suo respettivo codice html, usando le espressioni regolari, fino ad ora la funzione e questa:
Come vedete la funzione restituisce il testo, passato per parametro, dopo avendo fatto il parsing del BBCode.Codice PHP:function BBCode($text)
{
$bb = array(
"/\[b\](.*?)\[\/b\]/is",
"/\[i\](.*?)\[\/i\]/is",
"/\[u\](.*?)\[\/u\]/is",
"/\[left\](.*?)\[\/left\]/is",
"/\[center\](.*?)\[\/center\]/is",
"/\[right\](.*?)\[\/right\]/is",
"/\[code\](.*?)\[\/code\]/is",
"/\[color='(.*?)'\](.*?)\[\/color\]/is",
"/\[size='(.*?)'\](.*?)\[\/size\]/is",
"/\[link='(.*?)'\](.*?)\[\/link]/is",
"/\[list\](.*?)\[\/list]/is",
"/\[\*\](.*?)\n/is",
);
$html = array(
"[b]$1[/b]",
"[i]$1[/i]",
"<u>$1</u>",
"<div align=\"left\">$1</div>",
"<div align=\"center\">$1</div>",
"<div align=\"right\">$1</div>",
"<code>$1</code>",
"<font color=\"$1\">$2</font>",
"<font size=\"$1\">$2</font>",
"<a href=\"$1\" target=\"_Blank\">$2</a>",
"<ul>$1[/list]",
"[*]$1",
);
return preg_replace($bb, $html, $text);
}
Il problema, ovvero non è un problema, ma una miglioria che vorrei applicare io, e chè: se l'utente scrive nel testo il tag [ * ] ( ultima espressione nell'array $bb ), anche senza dichiararlo dentro la lista [ list ] ( espressione sopra all'ultima ), il tag [ * ] mi viene tradotto semplicemente in < li >.
La mia domanda è questa, è possibile ( modificando l'ultima espressione o unendo le ultime due ) avere lo stesso risultato, solo se il tag o i tags [ * ] si trovano solo all'interno di [ list ]? non so se mi spiego.

Rispondi quotando