Ho appena realizzato questa funzione, ovviamente non finita, per interpretare il BBCode:
Codice PHP:
function BBCode($text)
{
$bb = array(
"#\[b\](.*?)\[/b\]#",
"#\[i\](.*?)\[/i\]#",
"#\[u\](.*?)\[/u\]#",
"#\[left\](.*?)\[/left\]#",
"#\[center\](.*?)\[/center\]#",
"#\[right\](.*?)\[/right\]#",
"#\[code\](.*?)\[/code\]#"
);
$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>"
);
return preg_replace($bb, $html, $text);
}
Il testo che mi dovrebbe interpretare è scritto in una textarea il cui contenuto viene passato ad una variabile $text in questo modo:
Codice PHP:
$text = nl2br(htmlspecialchars(contenuto_textarea));
Per poi essere salvato nel database.
Successivamente, quando viene recuperato e passato alla funzione qui sopra, per poi essere stampato, in effetti il BBCode mi viene interpretato, ma solamente ad una condizione, ovvero ché: il testo, all'interno del BBCode, sia scritto tutto su una riga.
Cioè, se scrivo ad esempio [ code ] Ciao [/ code ] ( scrivo staccato per non farmelo interpretare dal forum ), lo script me lo interpreta perfettamente, ma se, all'interno della textarea scrivo:
Codice:
[ code ] Ciao
ciao [/ code ]
Portando il testo a capo, non me lo interpreta più.
Non so se mi sono spiegato bene, ma come mai mi accade ciò?
EDIT:
Credo che il problema sia nel punto, nell'espressione regolare, non ricordavo che quest'ultimo non comprendesse un a capo, scusate ma non me la cavo tanto bene con le espressioni regolari, cmq, sto provando a cercare un modo per dare valido qualsiasi carattere ( sia un carattere di spaziatura, numero, un a capo, ecc.. ), ma non riesco, come potrei sostituire l'espressione regolare?