- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Script] Formattazione testo con bbcode.
-
[Script] Formattazione testo con bbcode.
Ho fatto un sito con l'inserimento di articoli, molto semplice e ho ovviato alla formattazione del testo tramite il praticissimo bbcode messo a disposizione per noi piccoli webmaster.
Arrivo al mio problema: la formattazione del testo tramite bbcode avviene in modo esatto, tranne per i
Eccovene un esempio:
http://www.immigrazione.biz/circolare1.htmlEd ecco il bbcode.php da me usato:
<?php
//Funzione per interpretare il testo
function fBBCode($string)
{
//No HTML
$string = trim(str_replace("<", "<", $string));
$string = trim(str_replace(">", ">", $string));//CHR 13 $string = trim(str_replace(chr(13), ";", $string)); $string = trim(str_replace(";", "", $string)); //BBCODE $string = trim(str_replace("**", "<b>", $string)); $string = trim(str_replace("**", "</b>", $string)); $string = trim(str_replace("", "<i>", $string)); $string = trim(str_replace("", "</i>", $string)); $string = trim(str_replace("[S]", "<u>", $string)); $string = trim(str_replace("[/S]", "</u>", $string)); $string = trim(str_replace("", "<hr>", $string)); $string = trim(str_replace("*", "<li>", $string)); $string = trim(str_replace("[IMAGE=", "<img border='0' src='", $string)); $string = trim(str_replace("[url=", "<a href='", $string)); $string = trim(str_replace("", "</a>", $string)); $string = trim(str_replace("[LEFT]", "<div align='left'>", $string)); $string = trim(str_replace("[CENTER]", "<div align='center'>", $string)); $string = trim(str_replace("[RIGHT]", "<div align='right'>", $string)); $string = trim(str_replace("[/LEFT]", "</div>", $string)); $string = trim(str_replace("[/CENTER]", "</div>", $string)); $string = trim(str_replace("[/RIGHT]", "</div>", $string)); $string = trim(str_replace("", "</font>", $string)); $string = trim(str_replace("]", "'>", $string)); //Ritorno il valore return $string;
}
?>
Qualche suggerimento per piacere?
Sinceramente non capisco il perchè. Grazie a tutti per chi mi volesse aiutareHo appena risolto. Grazie lo stesso. PS = ecco la soluzione.
Ho aggiunto $string = trim(str_replace("", "<br>", $string));
$string = trim(str_replace("[/BR]", "</br>", $string));al bbcode.php
-
Sei sicuro che per gli URL funzioni bene? Quelli del tipo {URL}http:etc{/URL}
Non li consideri quelli?
-
Ciao Stable,
credo che il BBcode è utile al fine di non creare errori nella pagina.La funzione che leggo somiglia ad una gia presente in php, e nel tuo caso sarebbe più semplice fare così:
strip_tags($string, '<b><i><u><hr><br><br/><li><a><img><div><font>');
Questo limita l'uso di html ai soli tag specificati tra virgolette, ma ovviamente bisogna scrivere gli articoli in html.....
Se si vuole proprio far uso del BBcode, sfruttiamolo a dovere....
Se in un articolo si apre un div senza chiuderlo..................................tutto il lavoro del webmaster va a farsi friggere.
Io consiglio questo per "tradurre" il BBcode:
[php] function bbcode_format($var) {
$search = array(
'/[b](.?)[/b]/is',
'/[i](.?)[/i]/is',
'/[u](.?)[/u]/is',
'/[img](.?)[/img]/is',
'/[url](.?)[/url]/is',
'/[url=(.?)](.*?)[/url]/is'
);
$replace = array(
'<strong>$1</strong>',
'<em>$1</em>',
'<u>$1</u>',
'<img src="$1" />',
'<a href="$1">$1</a>',
'<a href="$1">$2</a>'
);
$var = preg_replace ($search, $replace, $var);
return $var;
}[/php]Questa funzione traduce i tag BBcode in coppia, solo se prima aperti e poi chiusi, utilizza le espressioni regolari, ma anche se non si è pratici basta copiare quello che già c'è per aggiungere altri tag.Ciao.
-
Per quanto riguarda la funzione per trasformare i bbcode per poter funzionare in modo ricorsivo, ad esempio un sistema quote dove si può verificare il quote del quote, bisogna fare cosi:
[php]
<?phpfunction bbcode_format($var) {
$search = array(
"/[b](.?)[/b]/is",
"/[i](.?)[/i]/is",
"/[u](.?)[/u]/is",
"/[img](.?)[/img]/is",
"/[url](.?)[/url]/is",
"/[url=(.?)](.*?)[/url]/is"
);
$replace = array(
'<strong>$1</strong>',
"<em>$1</em>",
"<u>$1</u>",
'<img src="$1" />',
'<a href="$1">$1</a>',
'<a href="$1">$1</a>'
);while(preg_match("#[quote](.*?)[\/quote]#is", $var)!=0) $var = preg_replace("#[quote](.*?)[\/quote]#is", '<table border="1"><tr><td>$1</td></tr></table>', $var); $var = preg_replace($search, $replace, $var); return $var;
}
[/php]
-
Io ho tutti i tag cosi:
[b:sk07ho8k]testo[/b:sk07ho8k]come posso risolverlo?
Grazie
-
[PHP]
function bbcode_ritorno($var) {
$search = array(
"#<strong>(.?)</strong>#",
"#<em>(.?)</em>#",
"#<u>(.?)</u>#",
'#<img src="(.?)" />#',
'#<a href="(.?)">(.?)</a>#',
'#<a href="(.?)">(.?)</a>#'); $replace = array( '**$1**', "*$1*", "*$1*", '![image]($1)', '[url=$1]$2', '[url=$1]$2' ); while(preg_match('#<table border="1">(.*?)</table>#is', $var)!=0) $var = preg_replace('#<table border="1"><tr><td>(.*?)</td></tr></table>#is', '> $1', $var); $var = preg_replace( $search, $replace, $var); return $var;
}
[/PHP]
Provato e testato, questa funzione è l'inverso di quella proposta da Thedarkita!
Potrebbe sempre servire...